日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

奇怪-正则匹配的test函数

發布時間:2025/5/22 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 奇怪-正则匹配的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函数的全部內容,希望文章能夠幫你解決所遇到的問題。

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