Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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

js
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 keine return()-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.

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

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.

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 }

Umwandeln eines Iterators in einen richtigen Iterator

Da obj bereits ein richtiger Iterator ist, gibt Iterator.from(obj) sich selbst zurück.

js
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.

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 }

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-iterator.from

Browser-Kompatibilität

Siehe auch