对象属性遍历

对象属性遍历

定义对象

const obj = Object.create(
  { a: 1, b: 2 },
  {
    c: {
      value: 3,
      writable: true,
      configurable: true,
      enumerable: true,
    },
    d: {
      value: 4,
      writable: false,
      configurable: false,
      enumerable: false,
    },
  }
);
obj.e = 5;
obj.f = 6;
obj.a = 11;

for in

  • 它遍历的是对象所有可遍历(enumerable)的属性。

  • 它不仅遍历对象自身的属性,还遍历继承的属性。

  • 如果实例对象和原型链上的对象存在同名属性,以实例对象为准,也就是该属性只遍历1次。观察 obj.a (面试考点)

for (let key in obj) {
  console.log("key: ", key, ", value: ", obj[key]);
}
// key:  c , value:  3
// key:  e , value:  5
// key:  f , value:  6
// key:  a , value:  11
// key:  b , value:  2
  • 如果要排除原型链上的属性,用 hasOwnProperty 方法

    for (let key in obj) {
      if (obj.hasOwnProperty(key)) {
        console.log("key: ", key, ", value: ", obj[key]);
      }
    }
    // key:  c , value:  3
    // key:  e , value:  5
    // key:  f , value:  6
    // key:  a , value:  11
    

Object.keys()

  • 对象自身的(不含继承的)所有「可遍历属性」的键名
console.log(Object.keys(obj))
// ['c', 'e', 'f', 'a']

Object.getOwnPropertyNames()

  • 对象自身的(不含继承的)所有键名,包括不可遍历属性。
console.log(Object.getOwnPropertyNames(obj))
// [ 'c', 'd', 'e', 'f', 'a' ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值