2015-07-11 7 views
8

Recentemente, lavorando con JavaScript in Developer Tool, ho trovato una strana funzionalità. Chrome accetta qualsiasi codice tra parentesi aperta con operatore (più, segno meno) e l'operatore con le staffe di chiusura e lo esegue, in questo modo: enter image description hereStrano comportamento di JavaScript nello strumento di sviluppo di Chrome

non ho trovato questo comportamento in un altro browser, proprio in Chrome.

Forse è una funzionalità, ma perché e come funziona, può essere un problema con il motore JavaScript?

+0

Mi piace come lo hai chiamato una funzione e non un bug –

+1

Ho scritto un piccolo articolo a riguardo: https://medium.com/@asaskevich/how-does-chrome-executes-scripts-inside-developer- tool-59a5ea8f7de2 –

risposta

7

Questo è il modo in cui Chrome valuta il tuo ingresso:

with (typeof __commandLineAPI !== 'undefined' ? __commandLineAPI : { __proto__: null }) { 
// your code here... 
} 

Quindi una volta che l'input è }{ diventa

with (typeof __commandLineAPI !== 'undefined' ? __commandLineAPI : { __proto__: null }) {}{} // indefined 

ingresso successivo }-+{ diventa

undefined -+ {} // NaN 

E così sopra.

+0

Nota: l'oggetto è chiamato '__commandLineAPI', non' commandLineAPI'. Vale anche la pena notare che questo oggetto rappresenta Chrome [API della riga di comando] (https://developer.chrome.com/devtools/docs/commandline-api). –

+0

@gxoptg sicuro, sembra essere il risultato di come redactor ha analizzato il mio codice;) –

4

Questo accade perché Chrome avvolge il codice si entra nella console nel seguente costruzione:

with (typeof __commandLineAPI !== 'undefined' ? __commandLineAPI : { __proto__: null }) { 
    // Your code 
} 

Così, quando si entra qualcosa come } 10 {, il codice restituisce:

with (typeof __commandLineAPI !== 'undefined' ? __commandLineAPI : { __proto__: null }) { 
    } 10 { 
} 

che è vuoto with blocco, un numero e un blocco strutturale vuoto.

__commandLineAPI è l'oggetto interno che contiene Chrome Command Line API.