Please note, this is a STATIC archive of website developer.mozilla.org from 03 Nov 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

label

Une instruction étiquetée (labeled en anglais) peut être utilisée avec les instructions break ou continue. Un label permet d'identifier une instruction avec un identifiant pour y faire référence plus tard.

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
label
N'importe quel identifiant JavaScript qui n'est pas un mot-clé réservé.
instruction
Une instruction. break peut être utilisé avec n'importe quelle instruction identifiée. continue ne 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 instructions break ou continue afin d'interrompre cette boucle ou de reprendre son exécution.

JavaScript ne possède pas d'instruction goto, les étiquettes ne peuvent être utilisées que par les instructions break ou continue.

En mode strict, on ne peut pas utiliser let comme étiquette, cela lèvera une exception SyntaxError (let est un identifiant réservé).

Exemples

Faire référence à une étiquette avec continue 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 utilisant continue

É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++;
}

Utiliser break avec une étiquette au sein d'une boucle for

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 continue

Second exemple utilisant un label et break

É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é avec break

On peut utiliser des étiquettes dans des blocs simples mais seul break 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"
// "swap 

Déclarations de fonctions étiquetées

À partir d'ECMAScript 2015, les déclarations de fonctions étiquetées sont standardisées pour du code non-strict au sein de l'annexe de la spécification relative à la compatibilité web.

L: function F() {}

En revanche, en mode strict, cela lèvera une exception SyntaxError:

"use strict";
L: function F() {}
// SyntaxError: functions cannot be labelled

Les 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 labelled

Spécifications

Spécification État Commentaires
ECMAScript 3rd Edition (ECMA-262) Standard Définition initiale. Implémentée avec JavaScript 1.2.
ECMAScript 5.1 (ECMA-262)
La définition de 'Labelled statement' dans cette spécification.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
La définition de 'Labelled statement' dans cette spécification.
Standard  
ECMAScript 2017 Draft (ECMA-262)
La définition de 'Labelled statement' dans cette spécification.
Projet  

Compatibilité des navigateurs

Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari
Support simple (Oui) (Oui) (Oui) (Oui) (Oui)
Fonctionnalité Android Chrome pour Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Support simple (Oui) (Oui) (Oui) (Oui) (Oui) (Oui)

Voir aussi

Étiquettes et contributeurs liés au document

 Contributeurs à cette page : SphinxKnight, darul75, teoli
 Dernière mise à jour par : SphinxKnight,