简洁短小的 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 相关文章推荐
utf-8编码引起js输出中文乱码的解决办法
Jun 23 Javascript
使用jQuery实现dropdownlist的联动效果(sharepoint 2007)
Mar 30 Javascript
js格式化货币数据实现代码
Sep 04 Javascript
自写的jQuery异步加载数据添加事件
May 15 Javascript
javascript实现禁止右键和F12查看源代码
Dec 26 Javascript
jquery实现华丽的可折角广告代码
Sep 02 Javascript
javascript中eval和with用法实例总结
Nov 30 Javascript
Bootstrap table分页问题汇总
May 30 Javascript
Jquery on绑定的事件 触发多次实例代码
Dec 08 Javascript
AngularJS实现的回到顶部指令功能实例
May 17 Javascript
详解angular ui-grid之过滤器设置
Jun 07 Javascript
JSON 入门教程基础篇 json入门学习笔记
Sep 22 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
ADODB类使用
2006/11/25 PHP
批量修改RAR文件注释的php代码
2010/11/20 PHP
解析func_num_args与func_get_args函数的使用
2013/06/24 PHP
THinkPHP获取客户端IP与IP地址查询的方法
2016/11/14 PHP
PHP读取目录树的实现方法分析
2019/03/22 PHP
让ie运行js时提示允许阻止内容运行的解决方法
2010/10/24 Javascript
关于setInterval、setTimeout在jQuery中的使用注意事项
2011/09/28 Javascript
jqGrid增加时--判断开始日期与结束日期(实例解析)
2013/11/08 Javascript
JS动态加载脚本并执行回调操作
2016/08/24 Javascript
JS弹性运动实现方法分析
2016/12/15 Javascript
JavaScript禁止微信浏览器下拉回弹效果
2017/05/16 Javascript
浅析vue-router原理
2018/10/19 Javascript
Windows上node.js的多版本管理工具用法实例分析
2019/11/06 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
Python中使用HTMLParser解析html实例
2015/02/08 Python
简单实现python爬虫功能
2015/12/31 Python
K-means聚类算法介绍与利用python实现的代码示例
2017/11/13 Python
django用户登录和注销的实现方法
2018/07/16 Python
python实现自动登录
2018/09/17 Python
Python选择网卡发包及接收数据包
2019/04/04 Python
华为2019校招笔试题之处理字符串(python版)
2019/06/25 Python
python适合人工智能的理由和优势
2019/06/28 Python
flask的orm框架SQLAlchemy查询实现解析
2019/12/12 Python
用python实现名片管理系统
2020/06/18 Python
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
校园创业策划书
2014/01/14 职场文书
2014年医学生毕业自我鉴定
2014/03/26 职场文书
火箭队口号
2014/06/18 职场文书
学校清明节活动总结
2014/07/04 职场文书
工作失职造成投诉的检讨书范文
2014/10/05 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
运动员入场前导词
2015/07/20 职场文书
小学秋季运动会加油口号及加油稿
2019/08/19 职场文书
Python djanjo之csrf防跨站攻击实验过程
2021/05/14 Python
修改并编译golang源码的操作步骤
2021/07/25 Golang
Redis过期数据是否会被立马删除
2022/07/23 Redis