我找到下面的代码,但我无法理解。
if (!-[1, ] && !window.XMLHttpRequest) {
document.execCommand("BackgroundImageCache", false, true);
}
是什么if(!-[1,])
意思?谢谢
我找到下面的代码,但我无法理解。
if (!-[1, ] && !window.XMLHttpRequest) {
document.execCommand("BackgroundImageCache", false, true);
}
是什么if(!-[1,])
意思?谢谢
检测旧的 Internet Explorer 是一种 hack。-[1,]
在-1
现代浏览器中(如此) false
,!
但NaN
在旧 IE 中(true
否定)。第一个返回正确结果的版本是 IE9。
那个确切的代码永远不会产生除 之外的任何东西false
,所以输入它是无意义的。我假设这是渲染输出,并且取决于某些服务器端变量,有时可能会有所不同。
看到它使用window.XMLHttpRequest
,我意识到它也可能是某种糟糕的浏览器检查形式。[1,]
创建一个数组,但结尾的逗号会使数组在 Chrome 和 Internet Explorer 中得到不同的处理。Chrome 会将其识别为只有一个数字的数组,可以隐式转换为数字,而 IE 会认为它是包含两个项目的数组,不能转换为数字。
-[1,0]
将NaN
在所有浏览器中产生。-[1]
将-1
在所有浏览器中产生。因此-[1,]
将NaN
在 IE(并因此执行代码)和-1
其他浏览器(而不执行代码)中产生。
这是一个可怕的黑客攻击。不要使用它。
如果您想知道是否window.XMLHttpRequest
可行,请专门测试,而不是其他任何东西。
这是特别糟糕的代码:
-[1, ]
结果为-1。
!-[1, ]
永远是假的。
由于 [] 意味着一个数组,这很糟糕,因为如果您在该数组中有多个值,则-
会给您一个 NaN。