5

我找到下面的代码,但我无法理解。

if (!-[1, ] && !window.XMLHttpRequest) {
    document.execCommand("BackgroundImageCache", false, true);
}

是什么if(!-[1,])意思?谢谢

4

3 回答 3

5

检测旧的 Internet Explorer 是一种 hack。-[1,]-1现代浏览器中(如此) false!NaN在旧 IE 中(true否定)。第一个返回正确结果的版本是 IE9。

于 2012-07-27T06:06:14.310 回答
4

那个确切的代码永远不会产生除 之外的任何东西false,所以输入它是无意义的。我假设这是渲染输出,并且取决于某些服务器端变量,有时可能会有所不同。

看到它使用window.XMLHttpRequest,我意识到它也可能是某种糟糕的浏览器检查形式。[1,]创建一个数组,但结尾的逗号会使数组在 Chrome 和 Internet Explorer 中得到不同的处理。Chrome 会将其识别为只有一个数字的数组,可以隐式转换为数字,而 IE 会认为它是包含两个项目的数组,不能转换为数字。

-[1,0]NaN在所有浏览器中产生。-[1]-1在所有浏览器中产生。因此-[1,]NaN在 IE(并因此执行代码)和-1其他浏览器(而不执行代码)中产生。

这是一个可怕的黑客攻击。不要使用它。

如果您想知道是否window.XMLHttpRequest可行,请专门测试,而不是其他任何东西。

于 2012-07-27T06:02:52.443 回答
0

这是特别糟糕的代码:

-[1, ]结果为-1。

!-[1, ]永远是假的。

由于 [] 意味着一个数组,这很糟糕,因为如果您在该数组中有多个值,则-会给您一个 NaN。

于 2012-07-27T06:06:15.400 回答