for...in
for...in被用来迭代对象的可枚举的属性,包括继承的。这种迭代声明可用于字符串数组和普通对象,但是不能用于Map和Set对象。
for (let prop in ['a', 'b', 'c'])
console.log(prop); // 0, 1, 2 (array indexes)
for (let prop in 'str')
console.log(prop); // 0, 1, 2 (string indexes)
for (let prop in {a: 1, b: 2, c: 3})
console.log(prop); // a, b, c (object property names)
for (let prop in new Set(['a', 'b', 'a', 'd']))
console.log(prop); // undefined (no enumerable properties)
for...of
for...of用于遍历可迭代对象,遍历对象的值而不是属性。可用于数组,字符串,Map,Set,但是不能用于普通对象。
for (let val of ['a', 'b', 'c'])
console.log(val); // a, b, c (array values)
for (let val of 'str')
console.log(val); // s, t, r (string characters)
for (let val of {a: 1, b: 2, c: 3})
console.log(prop); // TypeError (not iterable)
for (let val of new Set(['a', 'b', 'a', 'd']))
console.log(val); // a, b, d (Set values)
forEach()
forEach是数组的原型方法,可以遍历数组里的每个元素。遍历的时候可以获取值以及对应的索引。
['a', 'b', 'c'].forEach(
val => console.log(val) // a, b, c (array values)
);
['a', 'b', 'c'].forEach(
(val, i) => console.log(i) // 0, 1, 2 (array indexes)
);
https://www.30secondsofcode.org/blog/s/javascript-for-in-for-of-foreach