Javascript 什么是-[1,];“中的平均值”;如果(!-[1,]&;!window.XMLHttpRequest)";?

Javascript 什么是-[1,];“中的平均值”;如果(!-[1,]&;!window.XMLHttpRequest)";?,javascript,Javascript,我找到了下面的代码,但我无法理解 if (!-[1, ] && !window.XMLHttpRequest) { document.execCommand("BackgroundImageCache", false, true); } 如果(!-[1,])是什么意思?谢谢你,准确的代码将永远不会产生任何东西,除了false,所以输入它是毫无意义的。我假设这是渲染输出,根据服务器端变量的不同,有时可能会有所不同 由于它使用了window.XMLHttpRequest,我

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

if (!-[1, ] && !window.XMLHttpRequest) {
    document.execCommand("BackgroundImageCache", false, true);
}
如果(!-[1,])
是什么意思?谢谢你,准确的代码将永远不会产生任何东西,除了
false
,所以输入它是毫无意义的。我假设这是渲染输出,根据服务器端变量的不同,有时可能会有所不同

由于它使用了
window.XMLHttpRequest
,我意识到它也可能是某种糟糕的浏览器检查形式<代码>[1,]创建一个数组,但后面的逗号将使数组在Chrome和Internet Explorer中的处理方式不同。Chrome会把它识别为一个只有一个数字的数组,它可以隐式地转换成一个数字,而IE会认为它是一个包含两个项目的数组,它不能被转换成一个数字。
-[1,0]
将在所有浏览器中生成
NaN
<代码>-[1]将在所有浏览器中生成
-1
。因此,
-[1,]
将在IE中生成
NaN
(从而执行代码),在其他浏览器中生成
-1
(而不执行代码)

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


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

检测旧的Internet Explorer是一种黑客行为
-[1,]
在现代浏览器中是
-1
(因此
false
带有
),但在旧IE中是
NaN
true
否定)。返回正确结果的第一个版本是IE9。

这是非常糟糕的代码:

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

-[1,]
将始终为false


由于[]表示数组,这是不好的,因为如果该数组中有多个值,
-
将给您一个NaN。

事实上——似乎被广泛用作IE兼容性黑客。对我来说,
-[1,]
在chrome中产生
false
,但即使在IE9中也会产生
true
。@DavidHedlund我想你可能有一些兼容模式,或者以怪癖模式呈现页面。IE9有很好的Ecmascript支持,应该(对我来说也是如此)返回与Chrome相同的结果。@duri:你说得对,怪癖模式似乎是我浏览的特定网站强制要求的。那没关系。