Iterator.from()
Baseline 2025Newly available
Since March 2025, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
语法
js
from(object)
参数
返回值
如果 object
是一个可迭代对象,则会调用其 [Symbol.iterator]()
以获取迭代器。否则,object
将被视为一个迭代器。如果该迭代器的
结果为真(这意味着它在原型链中有 instanceof
Iterator
Iterator.prototype
),则直接返回它。否则,创建一个包装了原始迭代器的新 Iterator
对象。
描述
示例
将可迭代对象转换为恰当的迭代器
因为 obj
已经是一个可迭代对象,并且其 [Symbol.iterator]()
方法返回了一个恰当的迭代器,所以 Iterator.from(obj)
返回的迭代器与 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 }
规范
Specification |
---|
Iterator Helpers # sec-iterator.from |