Iterator.from()
Baseline
2025
Newly available
Since March 2025, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
Die Iterator.from() statische Methode erstellt ein neues Iterator-Objekt aus einem Iterator oder einem iterierbaren Objekt.
Syntax
Iterator.from(object)
Parameter
object-
Ein Objekt, das das iterierbare Protokoll oder das Iterator Protokoll implementiert.
Rückgabewert
Wenn object ein iterierbares Objekt ist, wird seine [Symbol.iterator]()-Methode aufgerufen, um den Iterator zu erhalten. Andernfalls wird object als ein Iterator angenommen. Wenn der Iterator bereits instanceof Iterator ist (was bedeutet, dass es Iterator.prototype in seiner Prototypenkette hat), wird er direkt zurückgegeben. Andernfalls wird ein neues Iterator-Objekt erstellt, das den ursprünglichen Iterator umhüllt.
Beschreibung
Diese Methode existiert, um benutzerdefinierte Iteratoren, die wahrscheinlich von Bibliotheken exportiert werden, in richtige Iteratoren zu konvertieren. Alle von Iterator.from() zurückgegebenen Iterator-Objekte erben von einem gemeinsamen Prototyp-Objekt, das die folgenden Methoden enthält:
next()-
Ruft die
next()-Methode des zugrunde liegenden Iterators auf und gibt das Ergebnis zurück. return()-
Ruft die
return()-Methode des zugrunde liegenden Iterators auf und gibt das Ergebnis zurück oder gibt{ value: undefined, done: true }zurück, wenn der zugrunde liegende Iterator keinereturn()-Methode hat.
Beispiele
>Umwandeln eines iterierbaren Objekts in einen richtigen Iterator
Da obj bereits ein iterierbares Objekt ist, das einen richtigen Iterator zurückgibt, wenn seine [Symbol.iterator]()-Methode aufgerufen wird, gibt Iterator.from(obj) denselben Iterator zurück.
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
Da obj2 ein iterierbares Objekt ist, das einen nicht richtigen Iterator zurückgibt, wenn seine [Symbol.iterator]()-Methode aufgerufen wird, gibt Iterator.from(obj2) einen neuen Iterator zurück, der den ursprünglichen Iterator umhüllt.
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 }
Umwandeln eines Iterators in einen richtigen Iterator
Da obj bereits ein richtiger Iterator ist, gibt Iterator.from(obj) sich selbst zurück.
const obj = (function* () {
yield 1;
yield 2;
yield 3;
})();
const iterator = Iterator.from(obj);
console.log(iterator === obj); // true
Da obj2 ein nicht richtiger Iterator ist, gibt Iterator.from(obj2) einen neuen Iterator zurück, der den ursprünglichen Iterator umhüllt.
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 }
Spezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-iterator.from> |