Recherche…
Règles d'insertion automatique des points-virgules
Il existe trois règles de base pour l'insertion de points-virgules:
- 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
}
.
- 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.- 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 unLineTerminator
, 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.