Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
label
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 juillet 2015.
Uneinstruction étiquetée (labeled en anglais) peut être utilisée avec les instructionsbreak oucontinue. Un label permet d'identifier une instruction avec un identifiant pour y faire référence plus tard.
Dans cet article
Exemple interactif
let str = "";loop1: for (let i = 0; i < 5; i++) { if (i === 1) { continue loop1; } str = str + i;}console.log(str);// Expected output: "0234"Note :Les boucles ou les blocs étiquetés sont très rares et on peut généralement utiliser des appels de fonction plutôt que des sauts de boucle.
Syntaxe
label: instruction;labelN'importe quel identifiant JavaScript qui n'est pas un mot-clé réservé.
instructionUne instruction.
breakpeut être utilisé avec n'importe quelle instruction identifiée.continuene peut être utilisé qu'avec des instructions de boucle.
Description
Une étiquette (label) peut être utilisée pour identifier une boucle et pour y faire référence à l'intérieur en utilisant les instructionsbreak oucontinue afin d'interrompre cette boucle ou de reprendre son exécution.
JavaScriptne possède pas d'instructiongoto, les étiquettes ne peuvent être utilisées que par les instructionsbreak oucontinue.
Enmode strict, on ne peut pas utiliserlet comme étiquette, cela lèvera une exceptionSyntaxError (let est un identifiant réservé).
Exemples
>Faire référence à une étiquette aveccontinue dans une boucle
var i, j;boucle1: for (i = 0; i < 3; i++) { //Le premier for correspond à "boucle1" boucle2: for (j = 0; j < 3; j++) { //Le second for correspond à "boucle2" if (i === 1 && j === 1) { continue boucle1; } else { console.log("i = " + i + ", j = " + j); } }}// On aura les résultats suivants :// "i = 0, j = 0"// "i = 0, j = 1"// "i = 0, j = 2"// "i = 1, j = 0"// "i = 2, j = 0"// "i = 2, j = 1"// "i = 2, j = 2"// On voit bien l'absence de "i = 1, j = 1" et "i = 1, j = 2"Second exemple utilisantcontinue
Étant donné un tableau d'élément et un tableau de tests, cet exemple donne le nombre d'éléments qui ont réussi tous les tests.
var nbItemsReussis = 0;var i, j;top: for (i = 0; i < items.length; i++) { for (j = 0; j < tests.length; j++) { if (!tests[j].reussi(items[i])) { continue top; } } nbItemsReussis++;}Utiliserbreak avec une étiquette au sein d'une bouclefor
var i, j;boucle1: for (i = 0; i < 3; i++) { // première boucle étiquetée « boucle1 » boucle2: for (j = 0; j < 3; j++) { // seconde boucle étiquetée « boucle2 » if (i == 1 && j == 1) { break boucle1; } console.log("i = " + i + ", j = " + j); }}// Ce qui produira en sortie// (dans la console)// "i = 0, j = 0"// "i = 0, j = 1"// "i = 0, j = 2"// "i = 1, j = 0"// Ici on voit la différence avec l'exemple précédent utilisant continueSecond exemple utilisant un label etbreak
Étant donné un tableau d'éléments et un tableau de tests, cet exemple permet de déterminer si oui ou non tous les éléments ont réussis tous les tests.
var toutReussi = true;var i, j;top: for (i = 0; items.length; i++) for (j = 0; j < tests.length; i++) if (!tests[j].reusi(items[i])) { toutReussi = false; break top; }Utilise un bloc étiqueté avecbreak
On peut utiliser des étiquettes dans des blocs simples mais seulbreak permettra de faire référence à des étiquettes en dehors d'une boucle.
toto: { console.log("face"); break toto; console.log("this will not be executed");}console.log("swap");// On aura alors dans la console :// "face"// "swapDéclarations de fonctions étiquetées
À partir d'ECMAScript 2015, les déclarations de fonctions étiquetées sont standardisées pour du code non-strictau sein de l'annexe de la spécification relative à la compatibilité web.
L: function F() {}En revanche, enmode strict, cela lèvera une exceptionSyntaxError:
"use strict";L: function F() {}// SyntaxError: functions cannot be labelledLes fonctions génératrices ne peuvent pas être étiquetées, en mode strict, comme en mode non-strict :
L: function* F() {}// SyntaxError: generator functions cannot be labelledSpécifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-labelled-statements> |