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()]
网友评论