[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Statements/label [Back]  [Original]

label - JavaScript | MDN

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 English Always switch to English

label

Baseline
Large disponibilit

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.

Une instruction tiquete (labeled en anglais) peut tre utilise avec les instructions break ou continue. Un label permet d'identifier une instruction avec un identifiant pour y faire rfrence 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 tiquets sont trs rares et on peut gnralement utiliser des appels de fonction plutt que des sauts de boucle.

Syntaxe

js
label: instruction;
label

N'importe quel identifiant JavaScript qui n'est pas un mot-cl rserv.

instruction

Une instruction. break peut tre utilis avec n'importe quelle instruction identifie. continue ne peut tre utilis qu'avec des instructions de boucle.

Description

Une tiquette (label) peut tre utilise pour identifier une boucle et pour y faire rfrence l'intrieur en utilisant les instructions break ou continue afin d'interrompre cette boucle ou de reprendre son excution.

JavaScript ne possde pas d'instruction goto, les tiquettes ne peuvent tre utilises que par les instructions break ou continue.

En mode strict, on ne peut pas utiliser let comme tiquette, cela lvera une exception SyntaxError (let est un identifiant rserv).

Exemples

Faire rfrence une tiquette avec continue dans une boucle

js
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 rsultats 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'lment et un tableau de tests, cet exemple donne le nombre d'lments qui ont russi tous les tests.

js
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

js
var i, j;

boucle1: for (i = 0; i < 3; i++) {
  // premire boucle tiquete  boucle1 
  boucle2: for (j = 0; j < 3; j++) {
    // seconde boucle tiquete  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 diffrence avec l'exemple prcdent utilisant continue

Second exemple utilisant un label et break

tant donn un tableau d'lments et un tableau de tests, cet exemple permet de dterminer si oui ou non tous les lments ont russis tous les tests.

js
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 rfrence des tiquettes en dehors d'une boucle.

js
toto: {
  console.log("face");
  break toto;
  console.log("this will not be executed");
}
console.log("swap");

// On aura alors dans la console :

// "face"
// "swap

Dclarations de fonctions tiquetes

partir d'ECMAScript 2015, les dclarations de fonctions tiquetes sont standardises pour du code non-strict au sein de l'annexe de la spcification relative la compatibilit web.

js
L: function F() {}

En revanche, en mode strict, cela lvera une exception SyntaxError:

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

Les fonctions gnratrices ne peuvent pas tre tiquetes, en mode strict, comme en mode non-strict :

js
L: function* F() {}
// SyntaxError: generator functions cannot be labelled

Spcifications

Spcification
ECMAScript 2027 LanguageSpecification
# sec-labelled-statements

Compatibilit des navigateurs

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page