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:你说得对,怪癖模式似乎是我浏览的特定网站强制要求的。那没关系。