for in - for of 对比

  • for in:遍历数组的索引
  • for of:遍历数组的值 ```javascript var a = [“a”,”b”,”c”,”d”,”e”];

for (var idx in a) { console.log( idx ) // 0 1 2 3 4 }

for (var val of a) { console.log( val ) // “a” “b” “c” “d” “e”
}

  1. <a name="BBbgM"></a>
  2. # 原理
  3. - 在底层,for..of 循环向 iterable 请求一个迭代器(通过内建的 `Symbol.iterator`),然后反复调用这个迭代器把它产生的值赋给循环迭代变量。
  4. ```javascript
  5. var it = {
  6. // 使迭代器it成为iterable
  7. [Symbol.iterator]() { return this },
  8. next() { .. }
  9. };
  10. it[Symbol.iterator]() === it; // true

例子

  1. var arr = [1,2,3];
  2. var it = arr[Symbol.iterator]();
  3. it.next(); // { value: 1, done: false }
  4. it.next(); // { value: 2, done: false }
  5. it.next(); // { value: 3, done: false }
  6. it.next(); // { value: undefined, done: true }