澄清使用javascript进行ie检测
Clarification on ie detection with javascript
我正在寻找在javascript中检测ie浏览器的方法,这是我找到的解决方案之一:
if (-[1,]) {
//Not IE
} else {
//IE
}
这是有效的,我可以使用它来应用CSS。我的问题是,这背后到底发生了什么?我不懂这个条件,在谷歌上输入它会得到有趣的结果,但不是相关的结果……
编辑
我的代码工作正常。我已经在所有浏览器和所有版本的IE中进行了测试。在这一点上,它只是一个好奇为什么这是有效的。它看起来像是和数组和负标之类的东西有关。这是我的问题,为什么,而不是我如何让它工作,因为它已经工作。
IE有一个Javascript解析问题:[1,]
被解析为[1, undefined]
。
符合标准的浏览器忽略逗号并将其解析为[1]
当对长度为1的数组应用一元反运算符时,将对数组中的单个元素取反。
因此,-[1]
为-1
(为真)。
但是,-[1, anything]
(IE解析[1,]
的方式)是NaN
,这是假的。
相反,使用Modernizr,它将自动为每个特性添加类,而不管使用哪种浏览器。
如果你真的想区分IE(这是一个坏主意),使用条件注释。
打开控制台,看看发生了什么。
Chrome:> -[1,]
-1
> [1,].length
1
IE 8 > -[1,]
NaN
> [1,].length
2
IE 9
> -[1,]
-1
> [1,].length
1
IE8将进入else语句,因为NaN
是一个false 值。-1
是一个 true 值,因此它将被视为true。它基本上是在测试浏览器如何处理数组中末尾的逗号。IE8及以下浏览器添加了一个额外的索引,而其他浏览器则忽略逗号。IE9+修复了这个问题,也忽略了它。当一元减号(可以使用一元加号)将数组转换为数字时,魔术就会起作用,您可以根据具有额外未定义索引的数组获得NaN
或-1
。
如果你的代码在IE9或IE10上进入else,那么这意味着你的页面不是在IE9/10模式下运行,而是在IE8或IE7模式下运行。
- CKeditor预览插件.js,为Chrome和IE进行编辑.因为它拒绝CSS样式
- 日期对象可以用于在IE 10中对数组进行排序吗
- jQuery日期选择器在Firefox和IE的MVC部分视图上进行ajax更新后无法工作
- 是否有一个JavaScript IDE允许在所有三种浏览器(IE,FF,Chrome)中进行调试
- 通过Javascript或jquery进行IE设置
- 在 IE 中将“<”和“>”作为元素属性值的一部分进行转义
- 如何避免在非IE浏览器中使用pushState和$.ajax(hash)进行双重提交
- 确保IE-9的兼容性,同时使用phantomJS进行端到端测试
- jQuery:$.getJSON对Chrome/IE上的数据进行排序
- 使用java脚本或jquery在IE中进行HT访问
- JQuery自动完成将不允许从下拉IE中进行选择
- 仅在IE 9和10中进行异步文件上载
- Yammer JSON SDK在Chrome和FF中通过ADFS进行身份验证,但在IE中拒绝访问
- 混合模式:在ie浏览器中进行正片叠底
- 澄清使用javascript进行ie检测
- IE, Safari:在客户端使用l10n.js进行本地化
- startsWith方法在IE中不受支持,是否对此进行任何替换
- Internetexplorer-可靠的Javascript方法,用于在IE中对SaveAs对话框进行功能/对象检测
- React.js在IE和安卓浏览器中与Meteor.js进行反应
- Chrome和IE自动对JSON对象进行排序,如何禁用此功能