2011-12-14 49 views
8

thể trùng lặp:
Question on this JavaScript Syntax (“What Does This Do?”)javascript chức năng kiểm tra

trong this bài viết tôi thấy điều này:

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

tôi nhìn này và tôi coudn't tìm ra cách không xyz truyền cho người gọi. do đó, tôi đã làm một số thử nghiệm tương tự trong giao diện điều khiển:

/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 

dường như .test() chức năng chuyển đổi đối số chuỗi và sau đó thực hiện các bài kiểm tra. vậy tại sao /xyz/.test(function(){xyz;}) được sử dụng thay vì /xyz/.test('xyz')?

+0

Nó khá khó hiểu, nhưng nó đã được đề xuất (và loại giải thích) bởi một trong số ít ý kiến ​​đầu tiên ở dưới cùng của bài viết. – nnnnnn

Trả lời

5

của nó một cách hiệu quả kiểm tra rằng:

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

lợi nhuận dễ nhận biết mã nguồn javascript:

"(function(){xyz;})"

như trái ngược với một cái gì đó sôi nổi rằng một số triển khai có thể trở lại.

Sử dụng .test để chuyển đổi hàm thành chuỗi sau đó xác minh rằng mã thông báo nội bộ (xyz) hiển thị trong kết quả.

0

Tôi chưa đọc toàn bộ bài viết, nhưng điều này có vẻ là một số loại trình duyệt/tính năng đánh hơi.

Kiểm tra của John nếu ẩn danh function(){xyz;} thực sự đang chuyển đổi thành chuỗi "function(){xyz;}". Có thể có các trình duyệt chuyển đổi nó sang một thứ khác và đó là những gì anh ta đang kiểm tra.

Tuy nhiên điều đó dường như đối với tôi là một chút của voodoo ...

Các vấn đề liên quan