JavaScript for...of Loop
本文最后更新于 2024年3月6日 晚上
Introduction to the JavaScript for…of loop
ES6 引入了一个新的语句 for…of 来迭代可迭代对象:
- Built-in Array, String, Map, Set, …
- Array-like objects such as arguments or NodeList
- User-defined objects that implement the iterator protocol.
for…of 的语法:
1 |
|
JavaScript for of loop examples
Iterating over arrays
1 |
|
如果不更改循环内的变量,则应使用 const 关键字而不是 let 关键字:
1 |
|
要访问循环内数组元素的索引,可以将 for…of 语句与数组的 entries() 方法结合使用。
array.entries() 方法在每次迭代中返回一对 [index, element]。
1 |
|
在此示例中,使用了数组解构将 entries() 方法的结果分配给每次迭代中的 index 和 color 变量。
In-place object destructuring with for…of
1 |
|
- The
ratings
is an array of objects. Each object has two properties user and score. - The
for...of
iterate over theratings
array and calculate the total scores of all objects. - The expression const {score} of ratings uses object destructing to assign the score property of the current iterated element to the score variable.
Iterating over strings
1 |
|
Iterating over Map objects
1 |
|
输出:
1 |
|
Iterating over set objects
1 |
|
for...of
vs. for...in
JavaScript 中的 for...in
循环会迭代对象的所有可枚举属性,包括对象自身的属性以及其原型链上的属性。这意味着 for...in
循环会遍历对象自身的属性,同时也会遍历其原型链上可枚举的属性。如果想要避免遍历原型链上的属性,可以使用 Object.hasOwnProperty()
方法来过滤出对象自身的属性。
for…in 迭代对象的所有可枚举属性。它不会迭代 Array、Map 或 Set 等集合。
与 for…in 循环不同,for…of 迭代一个集合,而不是一个对象。事实上,for…of 会迭代任何具有 [Symbol.iterator] 属性的集合的元素。
数组是一种特殊的对象,它的属性名是数字索引,而属性值则是数组中的元素。
1 |
|
输出:
1 |
|
在此示例中,for…in 语句迭代 scores 数组的属性,而 for…of 则迭代数组的元素。
JavaScript for...of Loop
https://stein283036.github.io/2024/03/06/JavaScript-for-of-Loop/