跳到主要内容

简述ES6规定for...in 和for...of有什么区别?

参考答案:

ES6(ECMAScript 2015)中的 for...infor...of 循环在遍历数组或对象时存在明显的区别。

  1. 遍历对象不同:for...in 循环主要用于遍历对象的可枚举属性,包括那些从原型链上继承来的。这意味着,如果你使用 for...in 遍历一个数组,它实际上会遍历数组的索引(即键名),而不是数组元素值。而 for...of 循环则主要用于遍历可迭代对象(如 Array,Map,Set,String,TypedArray,arguments 对象等等)的值。
  2. 语法和可读性:for...of 循环的语法更简洁,更容易理解,因为它直接遍历的是值,而不是键名或索引。这使得代码更易读,更易于理解。
  3. 遍历顺序:for...in 循环的遍历顺序取决于对象的属性插入顺序,这可能并不是按照数组索引的顺序。而 for...of 循环则总是按照数组索引的顺序遍历。

因此,当你在ES6中需要遍历数组或可迭代对象的值时,推荐使用 for...of 循环。而当你需要遍历对象的属性,包括那些从原型链上继承来的属性时,可以使用 for...in 循环。

请注意,虽然 for...in 也可以用于遍历数组,但由于它可能会遍历到额外的属性(如从原型链上继承的属性),并且遍历顺序可能不是按照数组索引的顺序,因此在遍历数组时通常推荐使用 for...of 循环。