属性的遍历

2024-01-14  本文已影响0人  简单tao的简单

for...in

自身 + 继承 + 可枚举

Object.keys(obj)

自身 + 可枚举

Object.getOwnPropertyNames(obj)

自身 + 可枚举 + 不可枚举

Object.getOwnPropertySymbols(obj)

自身的所有Symbol属性

Reflect.ownKeys(obj)

自身 + 可枚举 + 不可枚举 + Symbol
等同于Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target))的结果。

function Object1(){};
Object1.prototype.xxx = 1;
let obj = new Object1();

obj[Symbol()] = 0;
obj['b'] = 0;
obj[10] = 0;
obj[2] = 0;
obj['a'] = 0;

Object.defineProperty(obj, 'method1', {
    value: function () {
        alert("Non enumerable property");
    },
    enumerable: false
})

let arr = [];
for(let item in obj){
    arr.push(item);
}

console.log(arr) //['2', '10', 'b', 'a', 'xxx']
console.log(Object.keys(obj)) //['2', '10', 'b', 'a']
console.log(Object.getOwnPropertyNames(obj)) //['2', '10', 'b', 'a', 'method1']
console.log(Object.getOwnPropertySymbols(obj)) //[Symbol()]
console.log(Reflect.ownKeys(obj)) // ['2', '10', 'b', 'a', 'method1', Symbol()]
上一篇 下一篇

猜你喜欢

热点阅读