JavaScript – for…in、for…of 和 forEach 的不同点

for…in

说明

for...in 会迭代对象中所有的可枚举属性,当然也包括继承的可枚举属性。他可以对数组、字符串或普通对象进行迭代,但不能对 MapSet 对象进行迭代。

代码

for (let prop in ['a', 'b', 'c']) 
  console.log(prop);  // 输出数组的索引:0, 1, 2

for (let prop in 'str') 
  console.log(prop);  // 输出字符串的索引:0, 1, 2

for (let prop in {a: 1, b: 2, c: 3}) 
  console.log(prop);  // 输出对象的属性名称:a, b, c

for (let prop in new Set(['a', 'b', 'a', 'd'])) 
  console.log(prop); // 没有可枚举的属性,输出为空

for…of

说明

for...of 会对可以迭代的对象进行迭代,但他迭代的是对象的值,而不是对象的属性。他可以对数组、字符串、MapSet 对象进行迭代,但不能对普通对象进行迭代。

代码

for (let val of ['a', 'b', 'c']) 
  console.log(val);  // 输出数组的值:a, b, c

for (let val of 'str') 
  console.log(val);  // 输出字符串中的字符:s, t, r

for (let val of {a: 1, b: 2, c: 3}) 
  console.log(prop); // Uncaught TypeError: {(intermediate value)(intermediate value)(intermediate value)} is not iterable

for (let val of new Set(['a', 'b', 'a', 'd'])) 
  console.log(val);  // 输出 Set 值:a, b, d

forEach()

说明

forEach()Array 原型上的一个方法,他允许你迭代数组中的每一个元素。forEach() 虽然只能迭代数组,但他在迭代的时候能访问每一个元素的值和索引。

代码

['a', 'b', 'c'].forEach(
  val => console.log(val);  // 输出数组的值:a, b, c
);

['a', 'b', 'c'].forEach(
  (val, i) => console.log(i);  // 输出数组的索引:0, 1, 2
);

评论

还没有评论...留下你的评论!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Sidebar