2011-12-14 2 views
8

Можно создать дубликат:
Question on this JavaScript Syntax (“What Does This Do?”)Javascript функция тестирования

в this статье я нашел это:

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

я смотрел на это, и я coudn't выяснить, как xyz передается вызывающему. поэтому я сделал некоторые подобный тест в консоли:

/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 

, кажется, что функция .test() преобразует аргумент в строку, а затем делает тест. так зачем использовать /xyz/.test(function(){xyz;}), а не /xyz/.test('xyz')?

+0

Это довольно загадочным, но это было предложено (и отчасти объяснено) одним из первых комментариев в нижней части этой статьи. – nnnnnn

ответ

5

Ее эффективное тестирование, что:

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

возвращает узнаваемый яваскрипт исходного кода:

"(function(){xyz;})"

в отличие от чего-то напуганного, что некоторые реализаций могут вернуться.

Он использует .test для преобразования функции в строку, а затем проверяет, что в результате отображается внутренний токен (xyz).

0

Я не прочитал всю статью, но это, кажется, какой-то браузер/функция нюхает.

Проверка Джона, если анонимный function(){xyz;} фактически преобразуется в строку "function(){xyz;}". Вероятно, есть браузеры, которые преобразуют его в нечто другое, и это то, что он проверяет.

Однако это кажется мне быть немного вуду ...

Смежные вопросы