用于循环的JavaScript

Xuz*_*ang 7 javascript for-loop

在MDN https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/for...of中,

它说While for...in迭代属性名称,for...of迭代属性值.

那么,为什么第二个for...of不记录"你好"?

let arr = [3, 5, 7];
arr.foo = "hello";

for (let i in arr) {
   console.log(i); // logs "0", "1", "2", "foo"
}

for (let i of arr) {
   console.log(i); // logs "3", "5", "7"
}
Run Code Online (Sandbox Code Playgroud)

Tou*_*ffy 9

for ... in语句以任意顺序迭代对象的可枚举属性.

更确切地说,它还包括其原型链中的可枚举属性.

并且每个对象都被视为相同.它很简单,令人困惑,许多人在阵列上使用时都讨厌它.

for..of在内部使用符号.与任何对象[Symbol.iterator]可以通过遍历for..of,但什么是迭代,以及以什么顺序在符号定义,而不是语句本身的语义(允许其中属性不最初称为懒迭代器).

在数组的情况下,迭代器遍历零和数组之间的每个属性length-1,甚至是未定义且不会被拾取的属性for..in.但是它完全忽略了其他属性,就像Array .toString()从一开始就做的那样,以及Array .forEach()和来自ES5的朋友.这使得数组迭代一致.