Iterator.from()
语法
js
from(object)
参数
返回值
如果 object
是可迭代的,则调用其 [Symbol.iterator]()
方法以获取迭代器。否则,假定 object
为迭代器。如果迭代器已经是 instanceof
Iterator
(这意味着其原型链中包含 Iterator.prototype
),则直接返回它。否则,将创建一个新的 Iterator
对象,该对象包装原始迭代器。
描述
示例
将可迭代对象转换为正确的迭代器
因为 obj
已经是可迭代对象,当调用其 [Symbol.iterator]()
方法时会返回正确的迭代器,所以 Iterator.from(obj)
返回相同的迭代器。
js
const iterator = (function* () {
yield 1;
yield 2;
yield 3;
})();
const obj = {
[Symbol.iterator]() {
return iterator;
},
};
const iterator2 = Iterator.from(obj);
console.log(iterator2 === iterator); // true
因为 obj2
是可迭代对象,当调用其 [Symbol.iterator]()
方法时会返回非正确的迭代器,所以 Iterator.from(obj2)
返回一个新的迭代器,该迭代器包装原始迭代器。
js
const iterator = {
current: 0,
next() {
return { value: this.current++, done: false };
},
};
const obj2 = {
[Symbol.iterator]() {
return iterator;
},
};
const iterator2 = Iterator.from(obj2);
console.log(iterator2 === iterator); // false
console.log(iterator2.next()); // { value: 0, done: false }
console.log(iterator.next()); // { value: 1, done: false }
将迭代器转换为正确的迭代器
因为 obj
已经是正确的迭代器,所以 Iterator.from(obj)
返回自身。
js
const obj = (function* () {
yield 1;
yield 2;
yield 3;
})();
const iterator = Iterator.from(obj);
console.log(iterator === obj); // true
因为 obj2
是非正确的迭代器,所以 Iterator.from(obj2)
返回一个新的迭代器,该迭代器包装原始迭代器。
js
const obj2 = {
current: 0,
next() {
return { value: this.current++, done: false };
},
};
const iterator = Iterator.from(obj2);
console.log(iterator === obj2); // false
console.log(iterator.next()); // { value: 0, done: false }
console.log(obj2.next()); // { value: 1, done: false }
规范
规范 |
---|
迭代器助手 # sec-iterator.from |
浏览器兼容性
BCD 表仅在启用 JavaScript 的浏览器中加载。