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
yieldAusdruck zurück. Diese korrespondiert mit dernext()Methode in ES2015 Generator Objekt. Generator.prototype.close()- Beendet einen Generator, so dass der Aufruf von
next()zu einemStopIterationFehler führt. Diese korrespondiert mit derreturn()Methode in ES2015 Generator Objekt. Generator.prototype.send()- Wird benutzt, um einen Wert zum Generator zu senden. Der wert wird vom
yieldAusdruck zurückgegeben und gibt einen Wert vom nächstenyieldAusdruck zurück. Diese korrespondiert mit dernext(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
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.
Update compatibility data on GitHub
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Generator | Chrome Vollständige Unterstützung 39 | Edge Vollständige Unterstützung 13 | Firefox Vollständige Unterstützung 26 | IE Keine Unterstützung Nein | Opera Vollständige Unterstützung Ja | Safari Vollständige Unterstützung 10 | WebView Android Vollständige Unterstützung Ja | Chrome Android Vollständige Unterstützung 39 | Firefox Android Vollständige Unterstützung 26 | Opera Android Vollständige Unterstützung Ja | Safari iOS Vollständige Unterstützung 10 | Samsung Internet Android Vollständige Unterstützung Ja | nodejs
Vollständige Unterstützung
4.0.0
|
next | Chrome Vollständige Unterstützung 39 | Edge Vollständige Unterstützung 13 | Firefox Vollständige Unterstützung 26 | IE Keine Unterstützung Nein | Opera Vollständige Unterstützung Ja | Safari Vollständige Unterstützung 10 | WebView Android Vollständige Unterstützung Ja | Chrome Android Vollständige Unterstützung 39 | Firefox Android Vollständige Unterstützung 26 | Opera Android Vollständige Unterstützung Ja | Safari iOS Vollständige Unterstützung 10 | Samsung Internet Android Vollständige Unterstützung Ja | nodejs Vollständige Unterstützung Ja |
return | Chrome Vollständige Unterstützung 50 | Edge Vollständige Unterstützung 13 | Firefox Vollständige Unterstützung 38 | IE Keine Unterstützung Nein | Opera Vollständige Unterstützung 37 | Safari Vollständige Unterstützung 10 | WebView Android Vollständige Unterstützung 50 | Chrome Android Vollständige Unterstützung 50 | Firefox Android Vollständige Unterstützung 38 | Opera Android Vollständige Unterstützung Ja | Safari iOS Vollständige Unterstützung 10 | Samsung Internet Android Vollständige Unterstützung 5.0 | nodejs Vollständige Unterstützung 6.0.0 |
throw | Chrome Vollständige Unterstützung 39 | Edge Vollständige Unterstützung 13 | Firefox Vollständige Unterstützung 26 | IE Keine Unterstützung Nein | Opera Vollständige Unterstützung Ja | Safari Vollständige Unterstützung 10 | WebView Android Vollständige Unterstützung Ja | Chrome Android Vollständige Unterstützung 39 | Firefox Android Vollständige Unterstützung 26 | Opera Android Vollständige Unterstützung Ja | Safari iOS Vollständige Unterstützung 10 | Samsung Internet Android Vollständige Unterstützung Ja | nodejs
Vollständige Unterstützung
4.0.0
|
Legende
- Vollständige Unterstützung
- Vollständige Unterstützung
- Keine Unterstützung
- Keine Unterstützung
- Benutzer muss dieses Feature explizit aktivieren.
- Benutzer muss dieses Feature explizit aktivieren.
Siehe auch
Veraltete Generatoren
- Die veraltete Generator Function
- Der veraltete Generator Functionsausdruck
StopIteration- The legacy Iterator protocol