Zoeken…


Regels voor automatische puntkomma-invoeging

Er zijn drie basisregels voor het invoegen van puntkomma's:

  1. 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 } .
  1. 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.
  2. 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 één LineTerminator , 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.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow