2011-11-13 8 views
7

Voglio sapere, è legale?I punti e virgola sono obbligatori nelle istruzioni javascript?

function test() 
{ 
    alert ("hello") 
    $("#loading").show(); 
} 

O dovrei scrivere questo, invece:

function test() 
{ 
    alert ("hello"); 
    $("#loading").show(); 
} 

sono il punto e virgola opzionale in JavaScript? Perché l'ho visto in un forum:

No, il punto e virgola di solito è facoltativo in JavaScript (google per ASI/inserimento punto e virgola automatico). Usarli rende il codice molto più pulito e ASI è un orribile errore (almeno secondo me).

+1

See: http://stackoverflow.com/questions/7219541/what-is-the-difference-between-semicolons-in-javascript-and-in-python/7219549#7219549 e altre risposte al domanda – NullUserException

+1

Le tue due affermazioni hanno entrambi il punto e virgola - nessuno dei due è diverso. – Nightfirecat

+0

@Nightfirecat - Inizialmente non avevano, sembra che la modifica di NullUserException rimetta il punto e virgola. Modifica: ma poi rimosso di nuovo! –

risposta

12

I punti e virgola non sono sempre obbligatori, ma consiglio sempre di utilizzarli. Vedere la ECMAScript spec per le norme in materia di inserimento automatico e virgola:

Alcune dichiarazioni ECMAScript (istruzione vuota, dichiarazione variabile, istruzione di espressione, do-while, istruzione continue, rompere dichiarazione, dichiarazione di ritorno, e buttare dichiarazione) deve essere terminato con con punto e virgola. Tale punto e virgola può sempre apparire esplicitamente nel testo di origine . Per comodità, tuttavia, tale punto e virgola può essere omesso dal testo sorgente in determinate situazioni. Queste situazioni sono descritte dicendo che il punto e virgola viene automaticamente inserito in il flusso di token del codice sorgente in quelle situazioni.

Aggiornamento (per spiegare ulteriormente)

Forse la situazione più comune utilizzato per mostrare il motivo per cui l'inserimento automatico e virgola può essere brutta è che toccato da @sissonb in un'altra risposta. Si consideri il seguente:

function something(a, b) { 
    return 
    a + b; 
} 

Che cosa si può essere in attesa è per la nuova linea ad essere ignorato, e il codice interpretato come:

function something(a, b) { 
    return a + b; 
} 

Purtroppo, l'inserimento automatico e virgola entra in gioco, e il il codice è in realtà interpretato in questo modo:

function something(a, b) { 
    return; 
    a + b; 
} 

E un return istruzione vuota significa che la funzione restituisce undefined. Quindi, invece di una bella somma dei due argomenti, ottieni undefined e potenzialmente finisci per essere confuso su dove sei andato storto! Questo è il motivo per cui sono completamente d'accordo con l'affermazione nella tua domanda che l'inserimento automatico del punto e virgola è un'orribile disfunzione.

+0

Un'eccezione ragionevole sarebbe un callback one-liner: 'ar.sort (funzione (a, b) {return f (a) - f (b)})' –

0

virgola non sono obbligatorie. Vengono automaticamente aggiunti alla fine di una riga se manca che effettivamente causa questo codice non restituito.

return 
{ 
    text:"hello" 
} 
+1

It restituisce effettivamente 'undefined', che non è esattamente la stessa cosa di' null' – NullUserException

+0

@NullUserException ఠ_ఠ Aggiornato la mia risposta. Grazie – sissonb

Problemi correlati