Sök…


Regler för automatisk semikoloninsättning

Det finns tre grundläggande regler för införande av semikolon:

  1. När programmet tolkas från vänster till höger, upptäcks ett token (kallat det kränkande tokenet ) som inte tillåts av någon produktion av grammatiken, sätts en semikolon automatiskt inför det kränkande tokenet om ett eller flera av följande villkoren är sanna:
  • Det kränkande tokenet separeras från det föregående tokenet av minst en LineTerminator .
  • Det kränkande symbolet är } .
  1. När, i takt med att programmet analyseras från vänster till höger, slutet av inmatningsströmmen av tokens upptäcks och parsern inte kan analysera inmatningstokenströmmen som ett enda komplett ECMAScript- Program , sätts en semikolon automatiskt in i slutet av ingångsströmmen.
  2. När, när programmet analyseras från vänster till höger, uppstår ett token som tillåts av viss produktion av grammatiken, men produktionen är en begränsad produktion och tokenet skulle vara det första tokenet för en terminal eller icke-terminal omedelbart efter annotationen " [ingen LineTerminator här] " inom den begränsade produktionen (och därför kallas ett sådant token ett begränsat token), och det begränsade tokenet separeras från det föregående tokenet av minst en LineTerminator , sedan sätts en semikolon automatiskt inför det begränsade tokenet .

Det finns emellertid ett ytterligare åsidosättande villkor för de föregående reglerna: ett semikolon sätts aldrig in automatiskt om semikolonet sedan skulle tolkas som ett tomt uttalande eller om det semikolon skulle bli en av de två semikolonerna i rubriken på en for uttalande (se 12.6.3).

Källa: ECMA-262, Fifth Edition ECMAScript Specification:

Uttalanden påverkas av automatisk semikoloninsättning

  • tomt uttalande
  • var uttalande
  • uttryck uttalande
  • do-while uttalande
  • continue uttalandet
  • break uttalande
  • return uttalande
  • throw uttalande

Exempel:

När slutet av inmatningsströmmen av tokens uppstår och parsern inte kan para ingångs-tokenströmmen som ett enda komplett program, sätts en semikolon automatiskt in i slutet av ingångsströmmen.

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

Arrayindexering / literaler

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

Return statement:

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

Undvik att sätta in semikolon på returrätt

JavaScript-kodningskonventionen är att placera startkonsolen med block på samma rad i deras deklaration:

if (...) {

}

function (a, b, ...) {

}

Istället för i nästa rad:

if (...)
{

}

function (a, b, ...) 
{

}

Detta har antagits för att undvika införande av semikolon i returrätt som returnerar objekt:

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' }

På de flesta språk är placeringen av startfästet bara en fråga om personlig preferens, eftersom det inte har någon verklig inverkan på körningen av koden. Som du har sett i JavaScript kan placering av den första fästen i nästa rad leda till tysta fel.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow