简洁短小的 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 相关文章推荐
提高 DHTML 页面性能
Dec 25 Javascript
AJAX架构之Dojo篇
Apr 10 Javascript
通过javascript设置css属性的代码
Dec 28 Javascript
浅谈javascript的数据类型检测
Jul 10 Javascript
jQuery源码分析-01总体架构分析
Nov 14 Javascript
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
Aug 14 Javascript
JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法
Apr 25 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
Sep 07 Javascript
JS触摸事件、手势事件详解
May 04 Javascript
Angular项目从新建、打包到nginx部署全过程记录
Dec 09 Javascript
vue几个常用跨域处理方式介绍
Feb 07 Javascript
js实现简单选项卡制作
Aug 05 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和mysql中uft-8中文编码乱码的几种解决办法
2012/04/19 PHP
php更新修改excel中的内容实例代码
2014/02/26 PHP
PHP检测用户语言的方法
2015/06/15 PHP
PHP编写daemon process 实例详解
2016/11/13 PHP
Javascript Math对象
2009/08/13 Javascript
jQuery 标题的自动翻转实现代码
2009/10/14 Javascript
node.js使用nodemailer发送邮件实例
2014/03/10 Javascript
jQuery实现“扫码阅读”功能
2015/01/21 Javascript
jQuery+jRange实现滑动选取数值范围特效
2015/03/14 Javascript
javascript三种代码注释方法
2016/06/02 Javascript
12306 刷票脚本及稳固刷票脚本(防挂)
2017/01/04 Javascript
Bootstrap table 定制提示语的加载过程
2017/02/20 Javascript
jquery+css实现简单的图片轮播效果
2017/08/07 jQuery
详解easyui基于 layui.laydate日期扩展组件
2018/07/18 Javascript
[01:48]2018DOTA2亚洲邀请赛主赛事第二日五佳镜头 VG完美团战逆转TNC
2018/04/05 DOTA
python之yield表达式学习
2014/09/02 Python
python实现微信接口(itchat)详细介绍
2017/10/23 Python
python调用Delphi写的Dll代码示例
2017/12/05 Python
python机器学习之神经网络(二)
2017/12/20 Python
Python实现图片尺寸缩放脚本
2018/03/10 Python
python实现将读入的多维list转为一维list的方法
2018/06/28 Python
pycharm配置pyqt5-tools开发环境的方法步骤
2019/02/11 Python
Python任意字符串转16, 32, 64进制的方法
2019/06/12 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
2019/09/26 Python
Python 限定函数参数的类型及默认值方式
2019/12/24 Python
Python连接Hadoop数据中遇到的各种坑(汇总)
2020/04/14 Python
html5中的一些标签学习(心得)
2016/10/18 HTML / CSS
实习护士自我鉴定
2013/10/13 职场文书
酒店应聘自荐信
2013/11/09 职场文书
求职简历中个人的自我评价
2013/12/25 职场文书
八一建军节活动方案
2014/02/10 职场文书
歌颂祖国演讲稿
2014/05/04 职场文书
纪念九一八事变演讲稿:忘记意味着背叛
2014/09/14 职场文书
丧事主持词
2015/07/02 职场文书
应届毕业生的自我评价
2019/06/21 职场文书
Python将CSV文件转化为HTML文件的操作方法
2021/06/30 Python