javascriptのSymbol.iterator

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Symbol/iterator
https://qiita.com/rana_kualu/items/e82790fa50c05b167dcc
反復可能オブジェクトで、イテレーターを返すジェネレーター関数を参照できることが期待されるプロパティ。
オブジェクトが反復可能であるためには、[Symbol.iterator] キーを持っていなければならない。

const sampleArray = [1,2,3,4,5];

for (value of sampleArray) {
  console.log(value); // 1,2,3,4,5
}

// 上と等価
const iter = sampleArray[Symbol.iterator]();
for (value of iter) {
  console.log(value); // 1,2,3,4,5
}

// ユーザによる定義も可能
const sampleObj = {hogeProp:3};
sampleObj[Symbol.iterator] = function* () {
  for (let i = 0; i < this.hogeProp; i++) {
    yield i;
  }
};
for (value of sampleObj) {
  console.log(value); // 0,1,2
}