“ - [1,]”在“if(! - [1,]&&!window.XMLHttpRequest)”中的含义是什么?

时间:2012-07-27 06:00:07

标签: javascript

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

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

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

3 个答案:

答案 0 :(得分:6)

检测旧的Internet Explorer是一个黑客攻击。现代浏览器中-[1,]-1(因此false !},但旧IE中NaNtrue否定)。返回正确结果的第一个版本是IE9。

答案 1 :(得分:4)

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

看到它使用window.XMLHttpRequest,我意识到它也可能是一些糟糕的浏览器检查形式。 [1,]会创建一个数组,但尾随的逗号会在Chrome和Internet Explorer中对数组进行不同的处理。 Chrome会将此识别为仅包含一个数字的数组,可以隐式转换为数字,而IE会将其视为包含两个项目的数组,这些数据无法转换为数字。

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

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

如果您想知道window.XMLHttpRequest是否有效,请专门测试,而不是其他任何内容。

答案 2 :(得分:0)

这是特别糟糕的代码:

-[1, ]结果为数字-1。

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

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