Recherche…


Règles d'insertion automatique des points-virgules

Il existe trois règles de base pour l'insertion de points-virgules:

  1. Lorsque, comme le programme est analysé de gauche à droite, un jeton (appelé le jeton incriminé ) est rencontré, ce qui n'est autorisé par aucune production de grammaire, puis un point-virgule est automatiquement inséré avant le jeton incriminé. les conditions sont vraies:
  • Le jeton incriminé est séparé du jeton précédent par au moins un LineTerminator .
  • Le jeton incriminé est } .
  1. Lorsque, à mesure que le programme est analysé de gauche à droite, la fin du flux d'entrée de jetons est détectée et que l'analyseur ne peut pas analyser le flux de jetons d'entrée en un seul Program ECMAScript complet. le flux d'entrée.
  2. Lorsque, comme le programme est analysé de gauche à droite, on rencontre un jeton autorisé par la production de la grammaire, mais la production est une production restreinte et le jeton est le premier jeton pour un terminal ou un terminal non immédiatement après l'annotation. " [aucun LineTerminator ici] " dans la production restreinte (et donc un tel jeton est appelé jeton restreint), et le jeton restreint est séparé du jeton précédent par au moins un LineTerminator , puis un point-virgule est automatiquement inséré avant le jeton restreint .

Cependant, il y a une condition dérogatoire supplémentaire sur les règles précédentes: un point - virgule est jamais inséré automatiquement si le point - virgule serait alors analysée comme une déclaration vide ou si ce point - virgule deviendrait l' un des deux points - virgules dans l' en- tête d'une for déclaration (voir 12.6.3).

Source: ECMA-262, Spécification ECMAScript de la cinquième édition:

Instructions affectées par l'insertion automatique de points-virgules

  • déclaration vide
  • déclaration var
  • déclaration d'expression
  • do-while déclaration
  • continue déclaration
  • déclaration de break
  • déclaration de return
  • throw déclaration

Exemples:

Lorsque la fin du flux d'entrée de jetons est détectée et que l'analyseur ne peut pas analyser le flux de jetons d'entrée en un seul programme complet, un point-virgule est automatiquement inséré à la fin du flux d'entrée.

a = b
++c
// is transformed to:
a = b;
++c;
x
++
y
// is transformed to:
x;
++y;

Indexation des tableaux / littéraux

console.log("Hello, World")
[1,2,3].join()
// is transformed to:
console.log("Hello, World")[(1, 2, 3)].join();

Déclaration de retour:

return 
  "something";
// is transformed to
return;
  "something";

Eviter l'insertion de points-virgules sur les instructions de retour

La convention de codage JavaScript consiste à placer le crochet de début de bloc sur la même ligne de leur déclaration:

if (...) {

}

function (a, b, ...) {

}

Au lieu de dans la ligne suivante:

if (...)
{

}

function (a, b, ...) 
{

}

Cela a été adopté pour éviter l'insertion de points-virgules dans les instructions de retour qui renvoient des objets:

function foo() 
{
    return // A semicolon will be inserted here, making the function return nothing
    {
        foo: 'foo'
    };
}

foo(); // undefined

function properFoo() {
    return {
        foo: 'foo'
    };
}

properFoo(); // { foo: 'foo' }

Dans la plupart des langues, le placement du crochet de départ n'est qu'une question de préférence personnelle, car il n'a pas d'impact réel sur l'exécution du code. En JavaScript, comme vous l'avez vu, placer le crochet initial dans la ligne suivante peut entraîner des erreurs silencieuses.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow