for each...in
使用一个变量迭代一个对象的所有属性值,对于每一个属性值,有一个指定的语句块被执行.
Syntax:
for each (variable in object) { statement }
variable
- 用来遍历属性值的变量,前面的
var
关键字是可选的.该变量是函数的局部变量而不是语句块的局部变量.
object
- 该对象的属性值会被遍历.
statement
- 遍历属性值时执行的语句. 如果想要执行多条语句, 请用(
{ ... }
) 将多条语句括住.
Examples:
下面的代码片段演示如何遍历一个对象的属性值, 并计算它们的和:
var sum = 0; var obj = {prop1: 5, prop2: 13, prop3: 8}; for each (var item in obj) { sum += item; } print(sum); // 输出"26",也就是5+13+8的值
警告:永远不要使用for each...in语句遍历数组,仅用来遍历常规对象
for in
for...in语句以任意顺序遍历一个对象的可枚举属性。对于每个不同的属性,语句都会被执行。
Syntax:
for (variable in object) {...}
variable
- 在每次迭代时,将不同的属性名分配给变量。
object
- 被迭代枚举其属性的对象。
for...in 循环只遍历可枚举属性。像 Array
和 Object
使用内置构造函数所创建的对象都会继承自Object.prototype
和String.prototype
的不可枚举属性,例如 String
的 indexOf()
方法或 Object
的toString()
方法。循环将遍历对象本身的所有可枚举属性,以及对象从其构造函数原型中继承的属性(更接近原型链中对象的属性覆盖原型属性)。
Examples:
下面的函数接受一个对象作为参数。被调用时迭代传入对象的所有可枚举属性然后返回一个所有属性名和其对应值的字符串。
1 var obj = {a:1, b:2, c:3}; 2 3 for (var prop in obj) { 4 console.log("obj." + prop + " = " + obj[prop]); 5 } 6 7 // Output: 8 // "obj.a = 1" 9 // "obj.b = 2" 10 // "obj.c = 3"
for of
for...of语句在可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句
Syntax:
1 for (variable of iterable) { 2 //statements 3 }
variable
在每次迭代中,将不同属性的值分配给变量。
iterable
被迭代枚举其属性的对象。
Example:
1 let iterable = [10, 20, 30]; 2 3 for (let value of iterable) { 4 value += 1; 5 console.log(value); 6 } 7 // 11 8 // 21 9 // 31
参考:MDN