2011-12-14 70 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 2011-12-14 11:28:12

回答

5

它有效地測試一個:

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

回報識別JavaScript源代碼:

"(function(){xyz;})"

,而不是時髦的東西,一些實現可能返回。

它使用.test將函數轉換爲字符串,然後驗證內部令牌(xyz)在結果中是否可見。

0

我還沒有閱讀整篇文章,但這似乎是某種瀏覽器/功能嗅探。

John檢查匿名function(){xyz;}是否實際上正在轉換爲字符串"function(){xyz;}"。可能有瀏覽器將其轉換爲其他內容,這就是他正在檢查的內容。

不過這似乎對我來說有點巫術的......