日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

奇怪-正则匹配的test函数

發布時間:2025/5/22 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 奇怪-正则匹配的test函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

在John Resig 那篇關于在JavaScript中實現簡單繼承的文章中,有這樣一段代碼:

var fnTest = /xyz/.test(function(){xyz;}) ? /b_superb/ : /.*/;

對于其中正則表達式匹配函數test的用法,我很是迷惑:

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

我查閱了Mozilla developer center中關于test函數的描述:

Executes the search for a match between a regular expression and a specified string. Returns true or false.

字符串中是否有匹配正則表達式的子字符串。返回true或false。

其語法格式:

regexp.test([str])

注意這里的參數是字符串,根本沒有提到test函數的參數可以是函數的說法。

我試著修改這段奇怪的代碼,得到了一些運行結果:

/xyz/.test("xyz"); // true /xyz/.test(function(){"xyz";}); // false /xyz/.test(function(){return "xyz";}); // true /xyz/.test(function(){return xyz;}); // true /xyz/.test(function(){return axyz;}); // true /xyz/.test(function(){return "axyz";}); // true /xyz/.test(function(){return "xayz";}); // false

怎么回事?

華麗的分割線
=======================================
我終于知道了,卻原來在test內部進行了類型轉換,下面代碼:

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

等價于:

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

又等價于:

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

那么為什么下面的代碼返回false呢?

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

我們執行下這行代碼就知道了:

// 這行代碼的執行結果是:"function(){}" (function(){"xyz";}).toString();

所以我們可以寫出更加詭異的代碼來迷惑大家了

/function/.test(function(){}); // true // b 表示文字邊界(對英文而言的) /b_superb/.test(function(){this._super();}); // true

?

轉載于:https://www.cnblogs.com/sanshi/archive/2009/07/09/1519585.html

總結

以上是生活随笔為你收集整理的奇怪-正则匹配的test函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。