对象遍历方法
各种遍历对象的方法返回值的不同
前置代码:
function Obj() {
// 直接在this上添加属性
this.prop_this = 'prop_this';
// 在this上添加symbol属性
this[Symbol.for('prop_symbol')] = 'prop_symbol';
}
// 原型上添加属性
Obj.prototype.propProto = 'prop_proto';
const obj = new Obj();
// 设置遍历属性enumerable设置为否
Object.defineProperty(obj, 'prop_dontEnum', {
value: 'prop_dontEnum',
enumerable: false,
writable: false,
configurable: false
});
-
getOwnPropertyDescriptors 可以获取所有的自身属性描述
console.log(Object.getOwnPropertyDescriptors(obj));
// {
prop_this:
{ value: 'prop_this',
writable: true,
enumerable: true,
configurable: true },
prop_dontEnum:
{ value: 'prop_dontEnum',
writable: false,
enumerable: false,
configurable: false },
[Symbol(prop_symbol)]:
{ value: 'prop_symbol',
writable: true,
enumerable: true,
configurable: true }
} -
getOwnPropertyNames 可以获取自身除symbol之外的属性,获取自身symbol值可以使用 getOwnPropertySymbols
console.log(Object.getOwnPropertyNames(obj));
// [ 'prop_this', 'prop_dontEnum' ]console.log(Object.getOwnPropertySymbols(obj));
// [ Symbol(prop_symbol) ] -
for...in 可以获取自身可以枚举除symbol外的属性和原型属性
for(var i in obj) {
console.log(i);
}
// prop_this propProto -
Object.keys 和 Object.values 都只可以获取自身除了symbol外可枚举的属性
console.log(Object.keys(obj));
// [ 'prop_this' ] -
Reflect.ownKeys(obj)可以获取自身所有的属性
console.log(Reflect.ownKeys(obj));
// [ 'prop_this', 'prop_dontEnum', Symbol(prop_symbol) ]

浙公网安备 33010602011771号