JavaScript对象获取属性的几种方法

前言

JavaScript中获取对象属性方法比较多,但是每种方法适用的场景都是不同的,为了能说明情况,现假设如下

let c = Symbol.for('这是实例上的属性');
let e = Symbol.for('这是原型上的属性');
let obj = {a:1,b:2,[c]:5};
Reflect.setPrototypeOf(obj,{
  fn:2,
  [e]:8
})
Object.defineProperties(obj,{
  d:{
    value:6,
    enumerable:false
  }
})

Object.keys()

Object.keys(obj).forEach(prop=>{
  console.log(prop);
})
//a
//b

会获取实例对象本身属性,但是不包括symbol键

Object.getOwnPropertySymbols()

console.log('-----------------获取symbol键')
Object.getOwnPropertySymbols(obj).forEach(prop=>{
  console.log(prop);
})
// -----------------
// Symbol(这是实例上的属性)

用于获取symbol键,原型上的也不会获取

Object.getOwnPropertyNames()

console.log('-----------------不管枚举或者不可枚举都会获取')
Object.getOwnPropertyNames(obj).forEach(prop=>{
  console.log(prop);
})
//a
//b
//d

不管是否可枚举都会获取,仍然不包括symbol键

for…in

for(const prop in obj){
  console.log(prop);
}
//a
//b
//fn

获取属性,原型上的仍然会获取,所以使用该方法迭代需要慎重是否需要原型上的属性,使用该方法迭代实例对象可以添加hasOwnProperty进行判断

for(const prop in obj){
  if(obj.hasOwnProperty(prop)){
    console.log(prop);
  }
}
//a
//b
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值