Ricerca…


Regole di inserimento automatico punto e virgola

Esistono tre regole base per l'inserimento del punto e virgola:

  1. Quando, mentre il programma viene analizzato da sinistra a destra, viene rilevato un token (chiamato token offendente ) non consentito da alcuna produzione della grammatica, quindi viene inserito automaticamente un punto e virgola prima del token offendente se uno o più dei seguenti le condizioni sono vere:
  • Il token incriminato è separato dal token precedente da almeno un LineTerminator .
  • Il token incriminato è } .
  1. Quando il programma viene analizzato da sinistra a destra, viene rilevata la fine del flusso di input dei token e il parser non è in grado di analizzare il flusso di token di input come un singolo Program ECMAScript completo, quindi un punto e virgola viene inserito automaticamente alla fine di il flusso di input.
  2. Quando, come il programma viene analizzato da sinistra a destra, viene rilevato un token che è consentito da alcune produzioni della grammatica, ma la produzione è una produzione limitata e il token sarebbe il primo token per un terminale o non terminale che segue immediatamente l'annotazione " [nessun LineTerminator qui] " all'interno della produzione limitata (e quindi tale token è chiamato token limitato) e il token limitato viene separato dal token precedente da almeno un LineTerminator , quindi un punto e virgola viene inserito automaticamente prima del token limitato .

Tuttavia, esiste una condizione di override aggiuntiva sulle regole precedenti: un punto e virgola non viene mai inserito automaticamente se il punto e virgola viene analizzato come un'istruzione vuota o se tale punto e virgola diventa uno dei due punti e virgola nell'intestazione di un'istruzione for (vedere 12.6.3).

Fonte: ECMA-262, Fifth Edition Specifica ECMAScript:

Dichiarazioni interessate dall'inserimento automatico del punto e virgola

  • dichiarazione vuota
  • dichiarazione var
  • espressione
  • dichiarazione do-while
  • continue dichiarazione
  • dichiarazione di break
  • dichiarazione di return
  • throw dichiarazione

Esempi:

Quando viene incontrata la fine del flusso di input dei token e il parser non è in grado di analizzare il flusso di token di input come un singolo programma completo, un punto e virgola viene automaticamente inserito alla fine del flusso di input.

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

Indicizzazione / letterali di matrice

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

Dichiarazione di ritorno:

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

Evita l'inserimento del punto e virgola nelle dichiarazioni di reso

La convenzione di codifica JavaScript prevede di posizionare la parentesi iniziale dei blocchi sulla stessa riga della loro dichiarazione:

if (...) {

}

function (a, b, ...) {

}

Invece della riga successiva:

if (...)
{

}

function (a, b, ...) 
{

}

Questo è stato adottato per evitare l'inserimento del punto e virgola nelle istruzioni di ritorno che restituiscono oggetti:

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

Nella maggior parte delle lingue il posizionamento della parentesi di partenza è solo una questione di preferenze personali, in quanto non ha alcun impatto reale sull'esecuzione del codice. In JavaScript, come hai visto, posizionare la parentesi iniziale nella riga successiva può portare a errori silenziosi.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow