• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    正则匹配的test函数
    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
    上一篇:javascript 正则表达式用法 小结
    下一篇:JavaScript 正则表达式 验证整数、小数、实数、有效位小数最简单
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    正则匹配的test函数 正则,匹配,的,test,函数,