gpt4 book ai didi

javascript - "if (!' '.replace(/^/, String))"是做什么的?

转载 作者:可可西里 更新时间:2023-11-01 01:17:47 26 4
gpt4 key购买 nike

在浏览压缩后的 Javascript 代码时,经常会看到如下语句:

if (!''.replace(/^/, String)) {
// ...
}

这是做什么的?似乎任何兼容 ECMA 的 JS 解释器都会用 String('') 替换字符串的开头,这仍然会导致空字符串,其否定为 true

在什么情况下行为会有所不同?

最佳答案

这似乎来自加壳机,例如 Dean Edwards javascript packer

所以,让我们下载代码,看看它说了什么......

// code-snippet inserted into the unpacker to speed up decoding
const JSFUNCTION_decodeBody =
//_decode = function() {
// does the browser support String.replace where the
// replacement value is a function?

' if (!\'\'.replace(/^/, String)) {
// decode all the values we need
while ($count--) {
$decode[$encode($count)] = $keywords[$count] || $encode($count);
}
// global replacement function
$keywords = [function ($encoded) {return $decode[$encoded]}];
// generic match
$encode = function () {return \'\\\\w+\'};
// reset the loop counter - we are now doing a global replace
$count = 1;
}
';

它似乎在检查当前浏览器是否支持将回调作为 replace() 的第二个参数,如果是,则利用它来加快速度。

作为余数,javascript 中的 String 是一个函数,您在执行 var foo = String('bar'); 时使用的函数,尽管您可能很少如果有的话,请使用该语法。

关于javascript - "if (!' '.replace(/^/, String))"是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17373828/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com