2012-09-30 8 views
5

I commenti sono letteralmente eliminati dalla fonte prima dell'analisi, oppure possono contare come interruzioni di riga e interrompere la continuità in determinati contesti?I commenti sono sicuri al 100% su tutti gli ambienti principali?

'foo'.replace(/f/, 'b') //f->b 
    .replace(/o/, 'a') //o->a 
    .replace(/o/, 'r') /*o->r*/ ; 

'foo'.replace(/x/, /*matches "x"*/ 'y'); 

var foo = (true !== false) ? // bikeshed 
      'bar' : /*if they're equal, which they won't be, we'll want 'baz'*/ 'baz'; 

sai, perché loro dicono spazio bianco è "sicuro" e "insignificante" o qualsiasi altra cosa, ma noi tutti sappiamo ci sono eccezioni a questo. I commenti sono effettivamente sicuro?

+0

Immagino di sì, a meno che non ci siano errori di parsing nel compilatore/parser che stai usando .. – techfoobar

+0

Domanda epica, il che significa che è stata chiesta prima. Ce l'ha? –

+3

Qualsiasi cosa stia facendo l'evidenziatore della sintassi del marcatore SO è cosa succederà – qwertymk

risposta

5

Sono ignorati durante l'analisi, se sono stati eliminati prima dell'analisi, il parser dovrebbe esaminare l'input due volte.

Tuttavia, il LineTerminator alla fine della riga non è considerato come parte del commento a riga singola; è riconosciuto separatamente da la grammatica lessicale e diventa parte del flusso di elementi di input per la grammatica sintattica. Questo punto è molto importante, perché implica che la presenza o l'assenza di linea singola commenti non significa influenzare il processo di inserimento automatico virgola

ES5 Specification for comments.

Il codice sorgente viene tokenizzato come se i commenti non esistessero.

+1

È 'abc/* Un identificatore */def' un identificatore (' abcdef') o due ('abc' seguito da' def')? –

+0

Posso citare una fonte, per favore? – wwaawaw

+0

Ottima domanda, @j_random_hacker – wwaawaw

3

Sì, i commenti sono sicuri.

(Detto questo, ho visto alcuni miniserie HTML lato server danneggiati che non sanno cosa sia JavaScript in linea e rimuove tutte le interruzioni di riga. Un commento che inizia con // commenta l'intero script.)

+0

Accetterò questo in 10 minuti o qualsiasi altra cosa se si può citare qualsiasi tipo di fonte. – wwaawaw

+1

@adlwalrus, La mia fonte è che in 15 anni, non ho visto un browser rovinare i commenti JavaScript. Se non vuoi fidarti di quello, allora va bene. La risposta di Alex è comunque migliore, con la sua spiegazione. – Brad

+1

@adlwalrus, Se vuoi le specifiche: http://ecma-international.org/ecma-262/5.1/#sec-7.4 – Brad

Problemi correlati