js黑科技语法,求助
发布于 1 天前 作者 code4funlnyx 272 次浏览 来自 问答

今天看一个min.js里面遇到一个如下这样的语法,小弟不才,看不懂这if条件判断语句是个什么意思,请大神指点

var a = "";
var b = ["replace"];
if(!a[b](/^/, String)){
    console.log('业务逻辑');
}
8 回复

感觉是测试浏览器兼容性的

@qimenxiaozi 额,这是写在后端的

当string不是字符串或者是空字符串就会进入条件

相当于!a.replace(‘xxxxx’),就是正则匹配的

以下是根据你的情况演变的:

!a[b](/^/, String)
--> !a[b.toString()](/^/, String) 
--> !a[['replace'].toString()](/^/, String)
--> !a['replace'](/^/, String)
--> !a.replace(/^/, String)

untitled1.png

看来是默认对[b]做了转换了,所以a[b]就是 字符串的replace方法

这个条件判断经常在加密压缩后的文件里出现, 是用来检测当前环境''.replace() 第二个参数是否可以是一个函数.

if (!''.replace(/^/,) { // 
// 在支持函数的环境. 相当于
if (!"".replace(/^/, function(match) {
    return String(match)
})) {

}
// 在不支持的环境, String会转换为字符串
if (!''.replace(/^/, String.toString())) { // 即 !''.replace(/^/, "function String() { [native code] }") === false;

}
回到顶部