简洁短小的 JavaScript IE 浏览器判定代码


Posted in Javascript onMarch 21, 2010

这个目前世界上最短的 Javascript 判定 IE 浏览器的方法来自俄罗斯!它已经在各版本的 IE 以及目前其他流行的浏览器上经过测试,基于 IE 的 Bug,微软虽然已经意识到,但是从来没有纠正过。

<script type='text/javascript'> 
var ie = !-[1,]; 
alert(ie); 
</script>

以上代码运行结果:IE 下返回true,其他标准浏览器返回false。!-[1,],仅仅只有 6 bytes!
不过如果反过来判断,标准浏览器返回 true 而 IE 返回 false的话,则可以再缩短一个byte。
<script type='text/javascript'> 
notIe = -[1,]; 
if(-[1,]){ 
// 标准浏览器代码 
}else{ 
// IE Only的代码 
} 
</script>

看完了这些,你们是不是很好奇这些是怎么运行的?请继续看下文。
这个 Bug 产生的原因是 IE 会添加一个空数组元素到数组元素的总数里。
[1,]. Length标准浏览器会返回 1 (基于标准的 ECMAscript ,在数组最后的逗号”,”会被忽略,这是为了方便在一列里显示以及自动生成等),但是 IE 会返回 2。当你打印这个数组的时候 IE 将会返回 “1, “,也就是两个元素,而其他标准浏览器将会返回 “1″。
这很容易验证,比如在 IE 和 FF中运行以下代码:
<script type='text/javascript'> 
alert([,]==','); 
//这是8个字符判定IE 
</script>

[1,]实际上浏览器的操作是toString()转换成字符串的操作,-[1,]是将字符串强制转换为数字。而 IE 将会返回 NaN,但是遗憾的是 NaN 并不是一个数字,因为[1,]转换成字符串后的”1,”里面带有逗号。而其他标准浏览器会返回 -1,这是一个非 0 的数字。
你知道,NaN 转换成 Boolean 型将返回 false,所以-[1,]在 IE 下将返回 false。而任何非 0 的数字转换成 Boolean 型(例如-1),在 标准浏览器下都将返回 true。所以我们得到了一个判定结果,!-[1,]在 IE 下返回true,而在其他标准浏览器下返回 false。也就达到了区分判定 IE 浏览器的目的。
当然,如前文所说,这个 Bug 其实微软很早就已经知道,但是却一直没有去修复它,所以在未来的 > IE8 的 IE 浏览器也就不确定是否依旧可以,不过基本上这么多代的 IE 都没有修复,未来的 IE 也不太会去修复的样子。
以下是其他的一些区分判定 IE 浏览器的代码,也可以参考下:
<script type='text/javascript'> 
// Option from Dean Edwards: 
var ie = /*@cc_on!@*/false; 
// Use the commented line: 
var ie//@cc_on=1; 
// Variation (shorter variable): 
var ie = '\v'=='v'; 
/ / Option to Gareth Hayes (former record-holder): 
var ie = !+"\v1"; 
</ script>
Javascript 相关文章推荐
用js计算页面执行时间的函数
Dec 07 Javascript
checkbox 复选框不能为空
Jul 11 Javascript
javascript实现的基于金山词霸网络翻译的代码
Jan 15 Javascript
javascript取消文本选定的实现代码
Nov 14 Javascript
js,jQuery 排序的实现代码,网页标签排序的实现,标签排序
Apr 27 Javascript
jquery.validate的使用说明介绍
Nov 12 Javascript
《JavaScript高级编程》学习笔记之object和array引用类型
Nov 01 Javascript
Web前端开发工具——bower依赖包管理工具
Mar 29 Javascript
JS实现的自动打字效果示例
Mar 10 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
Jan 26 Javascript
解决vue点击控制单个样式的问题
Sep 05 Javascript
electron中使用bootstrap的示例代码
Nov 06 Javascript
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
Mar 21 #Javascript
锋利的jQuery jQuery中的DOM操作
Mar 21 #Javascript
锋利的jQuery 要点归纳(一) jQuery选择器
Mar 21 #Javascript
jquery 可拖拽的窗体控件实现代码
Mar 21 #Javascript
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
Mar 21 #Javascript
javascript qq右下角滑出窗口 sheyMsg
Mar 21 #Javascript
js 居中漂浮广告
Mar 21 #Javascript
You might like
PHP Header用于页面跳转要注意的几个问题总结
2008/10/03 PHP
Uchome1.2 1.5 代码学习 common.php
2009/04/24 PHP
使用php判断服务器是否支持Gzip压缩功能
2013/09/24 PHP
一个完整的PHP类包含的七种语法说明
2015/06/04 PHP
php采集神器cURL使用方法详解
2016/02/19 PHP
js URL参数的拼接方法比较
2012/02/15 Javascript
html超链接打开窗口大小的方法
2013/03/05 Javascript
JQuery查找DOM节点的方法
2015/06/11 Javascript
AngularJs concepts详解及示例代码
2016/09/01 Javascript
基于AngularJS前端云组件最佳实践
2016/10/20 Javascript
详解jquery easyui之datagrid使用参考
2016/12/05 Javascript
AngularJS封装指令方法详解
2016/12/12 Javascript
微信小程序 this和that详解及简单实例
2017/02/13 Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
2017/06/30 Javascript
PHP自动加载autoload和命名空间的应用小结
2017/12/01 Javascript
Vuejs开发环境搭建及热更新【推荐】
2018/09/07 Javascript
JS实现的贪吃蛇游戏完整实例
2019/01/18 Javascript
vue里的data要用return返回的原因浅析
2019/05/28 Javascript
[48:48]完美世界DOTA2联赛PWL S3 Magama vs GXR 第一场 12.19
2020/12/24 DOTA
python中元类用法实例
2014/10/10 Python
Python编程实现的图片识别功能示例
2017/08/03 Python
tensorflow输出权重值和偏差的方法
2018/02/10 Python
python实现电脑自动关机
2018/06/20 Python
Python使用POP3和SMTP协议收发邮件的示例代码
2019/04/16 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
2019/10/21 Python
jupyternotebook 撤销删除的操作方式
2020/04/17 Python
地球上最先进的胡子和头发修剪器:Bevel
2018/01/23 全球购物
荷兰照明、灯具和配件网上商店:dmlights
2019/08/25 全球购物
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
在校学生职业规划范文
2014/01/08 职场文书
商业计算机应用专业自荐书
2014/06/09 职场文书
动物科学专业求职信
2014/07/27 职场文书
借款协议书
2014/09/16 职场文书
乡镇党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
同事打架检讨书
2015/05/06 职场文书
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang