在没风的地方找太阳  在你冷的地方做暖阳 人事纷纷  你总太天真  往后的余生  我只要你 往后余生  风雪是你  平淡是你  清贫也是你 荣华是你  心底温柔是你  目光所致  也是你 想带你去看晴空万里  想大声告诉你我为你着迷 往事匆匆  你总会被感动  往后的余生  我只要你 往后余生  冬雪是你  春花是你  夏雨也是你 秋黄是你  四季冷暖是你  目光所致  也是你 往后余生  风雪是你  平淡是你  清贫也是你 荣华是你  心底温柔是你  目光所致  也是你
jQuery火箭图标返回顶部代码 - 站长素材

JS for..in与for..of的区别

for…in是遍历数组、对象的key

1.index索引为字符串型数字,不能直接进行几何运算
2.遍历顺序有可能不是按照实际数组的内部顺序
3.使用for in会遍历数组所有的可枚举属性,包括原型。
4.所以for in更适合遍历对象,不要使用for in遍历数组。

let arr = [1, 2, 3];
for (let i in arr) {
    console.log(i)
}
let obj = {
    name: 'wuxiaodi',
    age: 18,
};
for (let i in obj) {
    console.log(i)//0  1  2 name  age
}

如果想用for…in遍历值那就把JS代码改成这样:

let arr = [1, 2, 3];
for (let i in arr) {
    console.log(arr[i])
}
let obj = {
    name: 'wuxiaodi',
    age: 18,
};
for (let i in obj) {
    console.log(obj[i])//1  2  3  wuxiaodi  18
}

那么除了使用for循环,如何更简单的正确的遍历数组达到我们的期望呢(即不遍历原型上的属性),ES6中的for of更胜一筹.

记住,for in遍历的是数组的索引(即键名),而for of遍历的是数组元素值。

for of遍历的只是数组内的元素,而不包括数组的原型属性。

for…of是遍历数组的value

let arr = [1, 2, 3];
for (let i of arr) {
    console.log(i)//1  2  3
}

 总结

  • for..of适用遍历数/数组对象/字符串/map/set等拥有迭代器对象的集合.但是不能遍历对象,因为对象没有迭代器.与forEach()不同的是,它可以正确响应break、continue和return语句
  • for-of循环不支持普通对象,但如果你想迭代一个对象的属性,你可以用for-in循环(这也是它的本职工作)或内建的Object.keys()方法:
    for (var key of Object.keys(someObject)) {
      console.log(key + ": " + someObject[key]);
    }
  • 遍历map对象时适合用解构,例如;
    for (var [key, value] of phoneBookMap) {
       console.log(key + "'s phone number is: " + value);
    }
  • 当你为对象添加myObject.toString()方法后,就可以将对象转化为字符串,同样地,当你向任意对象添加myObjectSymbol.iterator方法,就可以遍历这个对象了。
  • 举个例子,假设你正在使用jQuery,尽管你非常钟情于里面的.each()方法,但你还是想让jQuery对象也支持for-of循环,你可以这样做:
    jQuery.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];
  • 所有拥有Symbol.iterator的对象被称为可迭代的。可迭代对象的概念几乎贯穿于整门语言之中,不仅是for-of循环,还有Map和Set构造函数、解构赋值,以及新的展开操作符。
  • for...of的步骤
    or-of循环首先调用集合的Symbol.iterator方法,紧接着返回一个新的迭代器对象。迭代器对象可以是任意具有.next()方法的对象;for-of循环将重复调用这个方法,每次循环调用一次。举个例子,这段代码是我能想出来的最简单的迭代器:
    var zeroesForeverIterator = {
     [Symbol.iterator]: function () {
       return this;
      },
      next: function () {
      return {done: false, value: 0};
     }
    };

     

posted @ 2020-03-19 17:00  艺术诗人  阅读(922)  评论(0编辑  收藏  举报