js 中遍历对象的方法

包含原型链上的属性

  • for...in
var o = {name:"www",age:1};
o.__proto__.parent = "parent";
for(var item in o){
    console.log(o[item]);
}
// www、1、parent

不包含原型链上的属性

  • for...in
var o = {name:"www",age:1};
o.__proto__.parent = "parent";
for(var item in o){
    if (o.hasOwnProperty(item)) {
        console.log(o[item]);
    }   
}
// www、1
  • for...of
    利用 for...of 循环, 可以写出遍历任意对象的方法。 原生的JavaScript对象没有遍历接口, 无法使用 for...of 循环.
    1. 通过Generator函数objectEntries为它加上这个接口, 就可以用了
function* objectEntries(obj) {
      let propKeys = Reflect.ownKeys(obj);
      for (let propKey of propKeys) {
          yield [propKey, obj[propKey]];
      }
} 
let jane = { first: 'Jane', last: 'Doe' };
for (let [key, value] of objectEntries(jane)) {
console.log(`${key}: ${value}`);
} 
// first: Jane// last: Doe 
  1. 将Generator函数加到对象的 Symbol.iterator 属性上面。
function* objectEntries() {
    let propKeys = Object.keys(this);
    for (let propKey of propKeys) {
        yield [propKey, this[propKey]];
    }
} 
let jane = { first: 'Jane', last: 'Doe' };
jane[Symbol.iterator] = objectEntries;
 for (let [key, value] of jane) {
        console.log(`${key}: ${value}`);
} 
// first: Jane// last: Doe 
  • Object.keys
    Object.keys() 方法会返回一个由给定对象的所有可枚举自身属性的属性名组成的数组,数组中属性名的排列顺序和使用for-in
    循环遍历该对象时返回的顺序一致 (顺序一致不包括数字属性)(两者的主要区别是 for-in 还会遍历出一个对象从其原型链上继承到的可枚举属性)。
var o = {name:'wuerchang',age:1};
o.__proto__.parent = "parent";
Object.keys(o).forEach(k => console.log(o[k]));
// wuerchang、1
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容