JavaScript 对象属性的迭代与判断

hasOwnProperty

hasOwnProperty可以用来判断是否为实例属性还是原型属性。

const obj1 = {
 happy:100
}

// 以obj1原型创建obj2
const obj2 = Object.create(obj1);

obj2.happy;//100 可以访问到原型的happy属性
obj2.hasOwnProperty('happy'); //obj2 自身没有happy属性
obj1.hasOwnProperty('happy'); //obj1拥有happy属性

in

有两种方式使用 in 操作符:单独使用和在 for-in 循环中使用。

  1. 单独使用时,无论属性是在原型上还是在实例上,都会返回 true

  2. for-in 循环中使用 in 操作符时,可以通过对象访问且可以被枚举的属性都会返回,包括实例属性和原型属性。

'happy' in obj2; //true

for (let i in obj2) {
 console.log(i); // happy
}

Object.keys()

Object.keys() 获得对象(实例)上所有可枚举的实例属性。

Object.keys(obj1); //['happy']
Object.keys(obj2); //[]

Object.getOwnPropertyNames()

Object.getOwnPropertyNames() 用于列出对象(实例)的所有属性,无论是否可以枚举。

// 给obj2添加一个不可枚举的属性
Object.defineProperty(obj2, 'sad', {
 value: 0,
 enumerable:false //不可枚举 
 //其实不用写这个,只要通过这种方式添加属性,enumerable,configurable,writable都会默认设置为false
})
  
Object.keys(obj2); // []
Object.getOwnPropertyNames(obj2); //['sad'] 可以列举出属于对象的不可枚举属性
Object.getOwnPropertyDescriptor(obj2, 'sad') // 获取属性的配置
// {value: 0, writable: false, enumerable: false, configurable: false }

Object.getOwnPropertySymbols()

ES6增加了符号类型后,也就相应地增加了Object.getOwnPropertySymbols()方法。因为以符号为键的属性没有名称的概念。

const obj3 = {
 name: 'jiaqi',
 age: 110,
 [Symbol('name')]:'jiaqicoder'
}

Object.getOwnPropertyNames(obj3); //[ 'name', 'age' ]
Object.getOwnPropertySymbols(obj3); //[ Symbol(name) ]
Object.keys(obj3); //[ 'name', 'age' ]

for (let i in obj3) {
 console.log(i); //name , age
}

Object.values()与Object.entries()

前面都是一些获取属性键名的方法,而 Object.values()Object.entries()接收一个对象,返回它们内容的数组。Object.values() 返回对象值的数组,Object.entries()返回键/值对的数组。

let obj4 = {
 name: 'jiaqi',
 age: 22,
 hobbies:{}
}

Object.keys(obj4); //[ 'name', 'age', 'hobbies' ]
Object.values(obj4); //[ 'jiaqi', 22, {} ]
Object.entries(obj4); //[ [ 'name', 'jiaqi' ], [ 'age', 22 ], [ 'hobbies', {} ] ]
  1. 上面两个方法执行对象的复制

    obj4.hobbies === Object.values(obj4)[2];
    obj4.hobbies === Object.entries(obj4)[2][1];
    
  2. 符号属性会被忽略

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值