Iterator.from()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used 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 |
浏览器兼容性
Report problems with this compatibility data on GitHubdesktop | mobile | server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
from |
Legend
Tip: you can click/tap on a cell for more information.
- Full support
- Full support
- No support
- No support
- See implementation notes.
- Has more compatibility info.
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.