js数组和对象的遍历小总结

139 阅读1分钟

一、对象的遍历
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()