for...in与Object.keys()

2,140 阅读1分钟

每天做个总结吧,坚持就是胜利!

    /**
        @date 2021-07-04
        @description for...in与Object.keys()
    */

壹(序)

for...inObject.keys()都可以用来遍历对象,获取到对象的除Symbol可枚举属性名,区别在于for...in会获取到对象原型上的所有除Symbol可枚举属性,而Object.keys()只能获取到自身的。

贰(验证)

const obj = {
  a: 1,
  b: 2,
};

Object.defineProperty(obj, 'c', {
  value: 3,
  enumerable: false,
});

const symbol = Symbol('d');

obj[symbol] = 4;

obj.__proto__ = {
  e: 5,
};

for (const key in obj) {
  console.log(key); // 'a', 'b', 'e'
}

const keys = Object.keys(obj);

console.log(keys); // ['a', 'b']

叁(其他)

可以使用in操作符判断某个属性是否在是某个对象上或其原型链上,并且可以判断Symbol属性和非可枚举属性;

console.log(e in obj); // true
console.log(symbol in obj); // true