2011-12-14 14 views
8

Eventuali duplicati:
Question on this JavaScript Syntax (“What Does This Do?”)javascript funzione di test

in this articolo ho trovato questo:

/xyz/.test(function(){xyz;}) 

Ho guardato questo e ho coudn't capire come il xyz è passato all'invocatore. così ho fatto qualche prova simile nella console:

/xyz/.test(function(){xya;}) > false 
/xyz/.test(function(){xyz;}) > true  

/xyz/.test(function(){'xya';}) > false 
/xyz/.test(function(){'xyz';}) > true 

/xyz/.test(function(){console.log('xya');}) > false 
/xyz/.test(function(){console.log('xyz');}) > true 

/xyz/.test(function(xya){}) > false 
/xyz/.test(function(xyz){}) > true 

/fuc/.test(function(){}) > false 
/func/.test(function(){}) > true 

sembra che la funzione .test() converte l'argomento di stringa e poi fa il test. quindi perché /xyz/.test(function(){xyz;}) utilizzato anziché /xyz/.test('xyz')?

+0

è abbastanza criptico, ma è stato suggerito (e tipo di spiegato) da uno dei primi commenti in fondo all'articolo. – nnnnnn

risposta

5

sua efficace prova che:

(function(){xyz;}).toString()

rendimenti riconoscibile codice sorgente JavaScript:

"(function(){xyz;})"

in contrapposizione a qualcosa di strano che alcune implementazioni possono restituire.

Utilizza .test per convertire la funzione in una stringa, quindi verifica che un token interno (xyz) sia visibile nel risultato.

0

Non ho letto l'intero articolo, ma questa sembra essere una sorta di browser/funzionalità di sniffing.

controllo di John se l'anonimo function(){xyz;} è in realtà essere la conversione alla stringa "function(){xyz;}". Probabilmente ci sono dei browser che lo convertono in qualcos'altro, ed è quello che sta controllando.

Tuttavia che non mi sembra essere un po 'voodoo ...