澄清即使用javascript检测即可

smi*_*omb 3 javascript internet-explorer

我正在寻找方法来检测javascript中的浏览器,这是我找到的解决方案之一:

if (-[1,]) {
    //Not IE

} else {
    //IE
}
Run Code Online (Sandbox Code Playgroud)

这是有效的,我可以使用这个很好地应用CSS.我的问题是,幕后发生了什么?我不明白这个条件,并将其输入谷歌让我感兴趣,但不相关的结果......

编辑

我的代码运行正常.我已在所有浏览器和IE的所有版本中测试过它.在这一点上,这只是一个好奇心,为什么这是有效的.看起来它与数组和负索引等有关.这是我的问题,为什么,不是我如何让它工作,因为它已经有效.

SLa*_*aks 6

IE有一个Javascript解析问题:[1,]被解析为[1, undefined].
符合标准的浏览器会忽略逗号并将其解析为[1]

当应用于长度为1的数组时,一元否定运算符将否定数组的单个元素.
因此,-[1]-1(这是真实的).
但是,-[1, anything](这是IE解析的方式[1,])NaN,这是假的.

但是,您不应该依赖此行为.

相反,使用Modernizr,它将自动为每个功能添加类,而不管浏览器.
如果你真的想要特别区分IE(这是一个坏主意),请使用条件注释.