Das Generator Objekt wird von der Generator Function zurückgegeben und entspricht beidem, dem Iterable Protokoll und dem Iterator Protokoll.

Syntax

function* gen() { 
  yield 1;
  yield 2;
  yield 3;
}

var g = gen(); // "Generator { }"

Methoden

Generator.prototype.next()
Gibt einen Wert vom Generator zurück (ausgelöst durch yield).
Generator.prototype.return()
Gibt den gegebene Wert zurück und beendet den Generator.
Generator.prototype.throw()
Erzeugt einen Fehler im Generator (beendet auch den Generator, wenn der Fehler nicht im Generator abgefangen wird).

Beispiele

Ein unendlicher Iterator

function* idMaker() {
    var index = 0;
    while(true)
        yield index++;
}

var gen = idMaker(); // "Generator { }"

console.log(gen.next().value); // 0
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
// ...

Veraltete Generatorobjekte

Firefox (SpiderMonkey) hat eine frühe Version der Generatoren in JavaScript 1.7 implementiert, bei der kein Stern (*) in der Funktionsdeklaration nötig war (man benutzte nur das yield Schlüsselwort im Funktionsrumpf). Seit Firefox 58 (Released am 23. Januar 2018) sind diese veralteten Generatoren entfernt (Bug 1083482).

Veraltete Generator Methoden

Generator.prototype.next()
Gibt einen Wert vom yield Ausdruck zurück. Diese korrespondiert mit der next() Methode in ES2015 Generator Objekt.
Generator.prototype.close()
Beendet einen Generator, so dass der Aufruf von next() zu einem StopIteration Fehler führt. Diese korrespondiert mit der return() Methode in ES2015 Generator Objekt.
Generator.prototype.send()
Wird benutzt, um einen Wert zum Generator zu senden. Der wert wird vom yield Ausdruck zurückgegeben und gibt einen Wert vom nächsten yield Ausdruck zurück. Diese korrespondiert mit der next(x) Methode in ES2015 Generator Objekt.
Generator.prototype.throw()
Erzeugt einen Fehler im Generator. Diese korrespondiert mit der throw() Methode in ES2015 Generator Objekt.

Veraltete Generator Beispiele

function fibonacci() {
  var a = yield 1;
  yield a * 2;
}

var it = fibonacci();
console.log(it);          // "Generator {  }"
console.log(it.next());   // 1
console.log(it.send(10)); // 20
console.log(it.close());  // undefined
console.log(it.next());   // throws StopIteration (as the generator is now closed)

Spezifikationen

Spezifikation Status Kommentar
ECMAScript 2015 (6th Edition, ECMA-262)
Die Definition von 'Generator objects' in dieser Spezifikation.
Standard Initiale Definition.
ECMAScript Latest Draft (ECMA-262)
Die Definition von 'Generator objects' in dieser Spezifikation.
Entwurf  

Browserkompatibilität

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid WebviewChrome für AndroidEdge MobileFirefox für AndroidOpera für AndroidiOS SafariSamsung InternetNode.js
Grundlegende UnterstützungChrome Vollständige Unterstützung 39Edge Vollständige Unterstützung 13Firefox Vollständige Unterstützung 26IE Keine Unterstützung NeinOpera Vollständige Unterstützung JaSafari Vollständige Unterstützung 10WebView Android Vollständige Unterstützung JaChrome Android Vollständige Unterstützung JaEdge Mobile Vollständige Unterstützung 13Firefox Android Vollständige Unterstützung 26Opera Android Vollständige Unterstützung JaSafari iOS Vollständige Unterstützung 10Samsung Internet Android Vollständige Unterstützung Janodejs Vollständige Unterstützung 4.0.0
Vollständige Unterstützung 4.0.0
Vollständige Unterstützung 0.12
Deaktiviert
Deaktiviert From version 0.12: this feature is behind the --harmony runtime flag.
nextChrome Vollständige Unterstützung 39Edge Vollständige Unterstützung 13Firefox Vollständige Unterstützung 26IE Keine Unterstützung NeinOpera Vollständige Unterstützung JaSafari Vollständige Unterstützung 10WebView Android Vollständige Unterstützung JaChrome Android Vollständige Unterstützung JaEdge Mobile Vollständige Unterstützung 13Firefox Android Vollständige Unterstützung 26Opera Android Vollständige Unterstützung JaSafari iOS Vollständige Unterstützung 10Samsung Internet Android Vollständige Unterstützung Janodejs Vollständige Unterstützung Ja
returnChrome Vollständige Unterstützung 50Edge Vollständige Unterstützung 13Firefox Vollständige Unterstützung 38IE Keine Unterstützung NeinOpera Vollständige Unterstützung 37Safari Vollständige Unterstützung 10WebView Android ? Chrome Android Vollständige Unterstützung 50Edge Mobile Vollständige Unterstützung 13Firefox Android Vollständige Unterstützung 38Opera Android Vollständige Unterstützung JaSafari iOS Vollständige Unterstützung 10Samsung Internet Android Vollständige Unterstützung 5.0nodejs Vollständige Unterstützung 6.0.0
throwChrome Vollständige Unterstützung 39Edge Vollständige Unterstützung 13Firefox Vollständige Unterstützung 26IE Keine Unterstützung NeinOpera Vollständige Unterstützung JaSafari Vollständige Unterstützung 10WebView Android Vollständige Unterstützung JaChrome Android Vollständige Unterstützung JaEdge Mobile Vollständige Unterstützung 13Firefox Android Vollständige Unterstützung 26Opera Android Vollständige Unterstützung JaSafari iOS Vollständige Unterstützung 10Samsung Internet Android Vollständige Unterstützung Janodejs Vollständige Unterstützung 4.0.0
Vollständige Unterstützung 4.0.0
Vollständige Unterstützung 0.12
Deaktiviert
Deaktiviert From version 0.12: this feature is behind the --harmony runtime flag.

Legende

Vollständige Unterstützung  
Vollständige Unterstützung
Keine Unterstützung  
Keine Unterstützung
Kompatibilität unbekannt  
Kompatibilität unbekannt
Benutzer muss dieses Feature explizit aktivieren.
Benutzer muss dieses Feature explizit aktivieren.

Siehe auch

Veraltete Generatoren

ES2015 Generatoren

Schlagwörter des Dokuments und Mitwirkende

Mitwirkende an dieser Seite: schlagi123, fscholz
Zuletzt aktualisiert von: schlagi123,