13、对象的遍历

1.对象的可枚举性

        // Object.getOwnPropertyDescriptor方法可以获取该属性的描述对象。

        let obj = { foo: 123 };
        Object.getOwnPropertyDescriptor(obj, 'foo')
        //  {
        //    value: 123,
        //    writable: true,
        //    enumerable: true,   //描述对象的enumerable属性,称为“可枚举性”,如果该属性为false,就表示某些操作会忽略当前属性。
        //    configurable: true
        //  }

目前,有四个操作会忽略enumerable为false的属性。

 for...in循环:只遍历对象自身的和继承的可枚举的属性。

 Object.keys():返回对象自身的所有可枚举的属性的键名。

JSON.stringify():只串行化对象自身的可枚举的属性。

Object.assign(): 忽略enumerable为false的属性,只拷贝对象自身的可枚举的属性。

2、属性的遍历

let obj = {
            name: 'tangCandy',
            age: 18,
            sex: 2,
            skill() {
                return 'eat'
            },
            __proto__: {
                lastname: '唐' //在对象原型上加属性
            }

        }

for...in 循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)

for (var key in obj) {

console.log(key, ":", obj[key]); //自己加的原型上的属性也会一起被遍历进来

//可以判断是否是自己的属性

if (obj.hasOwnProperty(key)) {

console.log(key, ":", obj[key]);

}

}

Object.keys(obj) 返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名。

let keyarr = Object.keys(obj); //['name', 'age', 'sex', 'skill']

keyarr.forEach(function (key) {

console.log(key, ":", obj[key]);

});

Object.getOwnPropertyNames(obj) 返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名。

Object.keys(obj).forEach(function (key) {

console.log(key, ":", obj[key]);

});

Object.getOwnPropertySymbols(obj) 返回一个数组,包含对象自身的所有 Symbol 属性的键名。

Object.getOwnPropertyNames(obj).forEach(function (key) {

console.log(key, ":", obj[key]);

});

Reflect.ownKeys(obj) 返回一个数组,包含对象自身的(不含继承的)所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举

Reflect.ownKeys(obj).forEach(function (key) {

console.log(key, ":", obj[key]);

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值