Symbol.iterator优雅的迭代对象和字符串

115 阅读1分钟

迭代对象(按对象内的条件)

let range = {
  from: 1,
  to: 5
};
range[Symbol.iterator] = function() {
  return {
    current: this.from,
    last: this.to,
      if (this.current <= this.last) {
        return { done: false, value: this.current++ };
      } else {
        return { done: true };
      }
    }
  }
}
for (let num of range) {
  console.log(num); // 1, then 2, 3, 4, 5
}

迭代字符串

let str = "Hello";
let iterator = str[Symbol.iterator]();
while (true) {
  let result = iterator.next();
  if (result.done) break;
  alert(result.value); // outputs characters one by one
}

javascript.info/iterable#st…