Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. Référence
  4. Expressions et opérateurs
  5. yield*

Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in EnglishAlways switch to English

yield*

Baseline Widely available

Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis ⁨septembre 2016⁩.

Uneexpressionyield* est utilisée afin de déléguer le mécanisme d'itération/génération à un autregénérateur ou à un autre objet itérable.

Exemple interactif

function* func1() {  yield 42;}function* func2() {  yield* func1();}const iterator = func2();console.log(iterator.next().value);// Expected output: 42

Syntaxe

js
yield * expression;
expression

L'expression qui renvoie un objet itérable.

Description

L'expressionyield* itère sur l'opérande et génère chaque valeur générée par l'opérande.

La valeur de l'expressionyield* est la valeur renvoyée par l'itérateur lorsque celui est terminé (la propriétédone vauttrue).

Exemples

Délégation de la génération

Dans le code suivant, les valeurs générées parg1() sont renvoyées grâce aux appels à la fonctionnext(), comme pour celles renvoyées parg2().

js
function* g1() {  yield 2;  yield 3;  yield 4;}function* g2() {  yield 1;  yield* g1();  yield 5;}var iterator = g2();console.log(iterator.next()); // { value: 1, done: false }console.log(iterator.next()); // { value: 2, done: false }console.log(iterator.next()); // { value: 3, done: false }console.log(iterator.next()); // { value: 4, done: false }console.log(iterator.next()); // { value: 5, done: false }console.log(iterator.next()); // { value: undefined, done: true }

Les autres objets itérables

yield* peut également être utilisé avec d'autres sortes d'itérables (chaînes, tableaux ou arguments) :

js
function* g3() {  yield* [1, 2];  yield* "34";  yield* Array.from(arguments);}var iterator = g3(5, 6);console.log(iterator.next()); // { value: 1, done: false }console.log(iterator.next()); // { value: 2, done: false }console.log(iterator.next()); // { value: "3", done: false }console.log(iterator.next()); // { value: "4", done: false }console.log(iterator.next()); // { value: 5, done: false }console.log(iterator.next()); // { value: 6, done: false }console.log(iterator.next()); // { value: undefined, done: true }

La valeur de l'expression yield*

yield* est une expression et non une instruction, elle est donc évaluée et fournit une valeur :

js
function* g4() {  yield* [1, 2, 3];  return "toto";}var résultat;function* g5() {  résultat = yield* g4();}var iterator = g5();console.log(iterator.next()); // { value: 1, done: false }console.log(iterator.next()); // { value: 2, done: false }console.log(iterator.next()); // { value: 3, done: false }console.log(iterator.next()); // { value: undefined, done: true }, g4() renvoie{ value: "toto", done: true } at this pointconsole.log(résultat); // "toto"

Spécifications

Specification
ECMAScript® 2026 Language Specification
# sec-generator-function-definitions-runtime-semantics-evaluation

Compatibilité des navigateurs

Voir aussi

Help improve MDN

Learn how to contribute

Cette page a été modifiée le par lescontributeurs du MDN.


[8]ページ先頭

©2009-2025 Movatter.jp