2011-12-14 12 views
8

Duplicar posibles:
Question on this JavaScript Syntax (“What Does This Do?”)Javascript función de prueba

en this artículo que encontré esto:

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

Miré a esto y yo coudn't averiguar cómo pasa el xyz al invocador Así que hice una prueba similar en la consola:

/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 

parece que la función .test() convierte el argumento de cadena y luego hace la prueba. Entonces, ¿por qué se usó /xyz/.test(function(){xyz;}) en lugar de /xyz/.test('xyz')?

+0

es bastante críptico, pero se sugirió (y tipo de explicarse) por uno de los primeros comentarios en la parte inferior del artículo. – nnnnnn

Respuesta

5

Su probar de forma eficaz que:

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

vuelve reconocible código fuente javascript:

"(function(){xyz;})"

en contraposición a algo mucho ritmo que algunas implementaciones pueden volver.

Utiliza .test para convertir la función en una cadena y luego verifica que un token interno (xyz) es visible en el resultado.

0

No he leído el artículo completo, pero parece que se trata de algún tipo de buscador/función de olfateo.

Verificación de Juan si el anónimo function(){xyz;} se está convirtiendo realmente a la cadena "function(){xyz;}". Probablemente haya navegadores que lo conviertan en otra cosa, y eso es lo que está comprobando.

Sin embargo, eso me parece ser un poco de vudú ...