Zoeken…
Regels voor automatische puntkomma-invoeging
Er zijn drie basisregels voor het invoegen van puntkomma's:
- Wanneer, terwijl het programma van links naar rechts wordt geparseerd, een token (het aanstootgevende token ) wordt aangetroffen dat niet is toegestaan door de productie van de grammatica, wordt automatisch een puntkomma ingevoegd vóór het betreffende token als een of meer van de volgende voorwaarden is waar:
- Het overtredende token wordt gescheiden van het vorige token door ten minste één
LineTerminator
.- Het aanstootgevende token is
}
.
- Wanneer, terwijl het programma van links naar rechts wordt geparseerd, het einde van de invoerstroom van tokens wordt aangetroffen en de parser de invoer-tokenstroom niet kan parseren als een enkel compleet ECMAScript-
Program
, wordt automatisch een puntkomma ingevoegd de invoerstroom.- Wanneer, terwijl het programma van links naar rechts wordt geparseerd, een token wordt aangetroffen dat is toegestaan door een bepaalde productie van de grammatica, maar de productie een beperkte productie is en het token het eerste token zou zijn voor een terminal of niet-terminaal onmiddellijk na de annotatie " [geen
LineTerminator
hier] " binnen de beperkte productie (en daarom wordt een dergelijk token een beperkt token genoemd) en het beperkte token wordt van het vorige token gescheiden door ten minste éénLineTerminator
, dan wordt automatisch een puntkomma ingevoegd vóór het beperkte token .Er is echter een aanvullende dwingende voorwaarde voor de voorgaande regels: een puntkomma wordt nooit automatisch ingevoegd als de puntkomma vervolgens zou worden ontleed als een lege instructie of als die puntkomma een van de twee puntkomma's in de kop van een
for
instructie zou worden (zie 12.6.3).
Bron: ECMA-262, vijfde editie ECMAScript Specificatie:
Verklaringen beïnvloed door automatische puntkomma-invoeging
- lege verklaring
-
var
verklaring - uitdrukking statement
-
do-while
verklaring - verklaring
continue
- verklaring
break
-
return
-
throw
verklaring
Voorbeelden:
Wanneer het einde van de invoerstroom van tokens wordt aangetroffen en de parser de invoertokenstroom niet als één volledig programma kan parseren, wordt automatisch een puntkomma ingevoegd aan het einde van de invoerstroom.
a = b
++c
// is transformed to:
a = b;
++c;
x
++
y
// is transformed to:
x;
++y;
Matrixindexering / letterlijk
console.log("Hello, World")
[1,2,3].join()
// is transformed to:
console.log("Hello, World")[(1, 2, 3)].join();
Terugkeer verklaring:
return
"something";
// is transformed to
return;
"something";
Vermijd het invoegen van puntkomma's op retourafschriften
De JavaScript-coderingsconventie is om de starthaak van blokken op dezelfde regel van hun verklaring te plaatsen:
if (...) {
}
function (a, b, ...) {
}
In plaats van in de volgende regel:
if (...)
{
}
function (a, b, ...)
{
}
Dit is overgenomen om invoegen van puntkomma's in retourinstructies te voorkomen die objecten retourneren:
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' }
In de meeste talen is de plaatsing van de starthaak slechts een kwestie van persoonlijke voorkeur, omdat het geen echte invloed heeft op de uitvoering van de code. Zoals u in JavaScript heeft gezien, kan het plaatsen van de eerste haak in de volgende regel tot stille fouten leiden.