关于使用javascript检测ie的澄清

关于使用javascript检测ie的澄清,javascript,internet-explorer,Javascript,Internet Explorer,我在寻找用javascript检测ie浏览器的方法,这是我找到的解决方案之一: if (-[1,]) { //Not IE } else { //IE } 这是可行的,我可以用它来应用CSS。我的问题是,这里的幕后发生了什么?我不明白这个条件,把它输入谷歌会让我很感兴趣,但不是相关的结果 编辑 我的代码运行良好。我已经在所有浏览器和IE的所有版本中对它进行了测试。在这一点上,这只是一个好奇,为什么它能工作。它似乎与数组和负索引之类的东西有关。这是我的问题,为什么,而不是如何让

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

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

} else {
    //IE
}
这是可行的,我可以用它来应用CSS。我的问题是,这里的幕后发生了什么?我不明白这个条件,把它输入谷歌会让我很感兴趣,但不是相关的结果

编辑
我的代码运行良好。我已经在所有浏览器和IE的所有版本中对它进行了测试。在这一点上,这只是一个好奇,为什么它能工作。它似乎与数组和负索引之类的东西有关。这是我的问题,为什么,而不是如何让它工作,因为它已经工作了。

IE有一个Javascript解析问题:
[1,]
被解析为
[1,未定义]

一致性浏览器忽略逗号并将其解析为
[1]

一元求反运算符应用于长度为1的数组时,将对数组的单个元素求反。
因此,
-[1]
-1
(这是真实的)。
然而,
-[1,anything]
(IE解析
[1,]
)是
NaN
,这是错误的

但是,您不应依赖此行为

相反,使用,它将自动为每个功能添加类,而不考虑浏览器。

如果您真的想特别区分IE(这是个坏主意),请使用。

打开控制台,看看发生了什么

铬:

> -[1,]
  -1
> [1,].length
  1
IE 8

IE 9


IE8将进入else语句,因为
NaN
是一个错误的值<代码>-1是一个真实值,因此它将被视为真实值。它基本上是测试浏览器如何处理数组中的尾随逗号。IE8和under添加了一个额外的索引,而其他索引忽略了逗号。IE9+修复了这个问题,也忽略了它。当一元减[可以使用一元加]将数组转换为一个数字时,这个魔法就起作用了,根据具有额外未定义索引的数组,您可以得到
NaN
-1


如果您的代码进入IE9或IE10上的else,则表示您的页面不是在IE9/10模式下运行,而是在IE8或IE7模式下运行

不要那样做。相反,使用条件注释,或者更好的是,使用功能检测。如果您想要所有IE,IE9将无法通过检查;如果您想要以IE10为目标,则IE9将无法通过条件编译。Jeff,该代码不会像您的“编辑”所声称的那样检测IE的所有版本。点击F12,查看IE浏览器运行的浏览器/文档模式。它可能是在IE8模式下运行的。@epascarello我正在条件中应用CSS3样式,ie9有能力做到这一点。ie9通过了这个测试是很好的,但是它显示了正在发生的事情,看起来OP一开始就不知道如何调试。
> -[1,]
  NaN 
> [1,].length
  2
> -[1,]
  -1
> [1,].length
  1