一、对象的遍历
1、for .. in ..
直接上代码,距离说明
const obj = { name: 'yayaya', age: '12', sex: 'female'};
Object.prototype.pro1 = function () {};// 在原型链上添加属性
Object.defineProperty(obj, 'country', {
Enumerable: true, //可枚举
});
Object.defineProperty(obj, 'nation', {
Enumerable: false, // 不可枚举
});
obj.contry = 'china';
for (const index in obj) {
console.log(`${index} = ${obj[index]}`);
}
/*
name = yayaya
age = 12
sex = female
contry = china
pro1 = function () {}
*/
总结:由上可见,
for .. in .. 遍历的是自身属性+原型链上的可枚举属性,而原型链上的最后输出,说明先遍历自身可枚举属性,后遍历原型链上的。
2、Object.keys()
const obj = { name: 'yayaya', age: '12', sex: 'female' };
Object.prototype.pro1 = function () {};
Object.defineProperty(obj, 'country', {
Enumerable: true,
value: 'ccc',
});
Object.defineProperty(obj, 'nation', {
Enumerable: false, // 不可枚举
});
obj.contry = 'china';
Object.keys(obj).forEach((index) => {
console.log(index, obj[index]);
});
/*
name yayaya
age 12
sex female
contry china
*/
总结,由上可见,Object.keys()遍历对象返回的是一个包含对象自身可枚举属性的数组(不含Symbol属性),不遍历原型链上的属性。
3、Object.getOwnPropertyNames()