L'instruction break permet de terminer la boucle en cours ou l'instruction switch ou label en cours et de passer le contrôle du programme à l'instruction suivant l'instruction terminée.

Syntaxe

break [label];
label
Paramètre optionnel. Un identifiant associé avec l'étiquette (label) de l'instruction. Si l'instruction à terminer n'est pas une boucle ou une instruction switch, ce paramètre est nécessaire.

Description

L'instruction break peut être utilisée avec une étiquette (label) optionnelle qui permet d'interrompre une instruction étiquetée. L'instruction break doit être imbriquée au sein de l'instruction référencée. L'instruction étiquetée peut correspondre à n'importe quel instruction de bloc ; il n'est pas nécessaire qu'elle soit précédée par une instruction de boucle.

Une instruction break, suivie ou non d'une étiquette, ne peut pas être utilisée dans le corps d'une fonction appartenant elle-même à une boucle, à une instruction Instructions/switch ou à une instruction label.

Exemples

Exemple simple utilisant break

La fonction qui suit utilise une instruction break qui interrompt la boucle while lorsque i vaut 3, grâce à l'instruction qui suit, la fonction renvoie  3 * x.

function testBreak(x) {
   var i = 0;

   while (i < 6) {
      if (i == 3) {
         break;
      }
      i += 1;
   }
   return i * x;
}

Utiliser break avec les labels

Dans le code suivant, on utilise les instructions break avec des blocs étiquetés. Une instruction break doit être présente à l'intérieur du bloc auquel elle fait référence. Ici, on voit que bloc_interne est compris dans bloc_externe.

bloc_externe: {

  bloc_interne: {
    console.log ('1');
    break bloc_externe;  // interrompt bloc_externe ET bloc_interne
    console.log (':-('); // ignoré
  }

  console.log ('2');     // ignoré
}

Dans le code qui suit, on utilise également des instructions break avec des blocs étiquetés mais on obtient une exception SyntaxError car l'instruction break au sein de bloc_1 référence bloc_2, or bloc_1 n'est pas compris dans bloc_2 :

bloc_1: {
  console.log ('1');
  break bloc_2;  // SyntaxError: label not found
}

bloc_2: {
  console.log ('2');
}

Utiliser break dans des fonctions imbriquées dans des boucles

Dans le cas d'une fonction imbriquée dans une boucle while :

function testBreak(x){
  var i = 0;
  while (i < 6) {
    if (i === 3) {
      (function() {
        break;
      })();
    }
    i += 1;
  }
  return i * x;
}

testBreak(1); // SyntaxError: Illegal break statement

Dans le cas d'une fonction imbriquée dans une instruction label :

bloc_1: {
  console.log('1');
  (function() {
    break bloc_1; // SyntaxError: Undefined label 'bloc_1'
  })();
}

Spécifications

Spécification Statut Commentaires
ECMAScript 1st Edition (ECMA-262) Standard Définition initiale. Version non étiquetée.
ECMAScript 3rd Edition (ECMA-262) Standard Version étiquetée ajoutée.
ECMAScript 5.1 (ECMA-262)
La définition de 'instruction break' dans cette spécification.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
La définition de 'instruction break' dans cette spécification.
Standard  
ECMAScript Latest Draft (ECMA-262)
La définition de 'Break statement' dans cette spécification.
Projet  

Compatibilité des navigateurs

Update compatibility data on GitHub
OrdinateurMobileServeur
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebview AndroidChrome pour AndroidEdge MobileFirefox pour AndroidOpera pour AndroidSafari sur iOSSamsung InternetNode.js
Support simpleChrome Support complet OuiEdge Support complet OuiFirefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui

Légende

Support complet  
Support complet

Voir aussi

Étiquettes et contributeurs liés au document

Étiquettes : 
Contributeurs à cette page : SphinxKnight, teoli, matteodelabre
Dernière mise à jour par : SphinxKnight,