简洁短小的 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 相关文章推荐
另类调用flash无须激活的方法
Dec 27 Javascript
Prototype 学习 工具函数学习($方法)
Jul 12 Javascript
在javascript将NodeList作为Array数组处理的方法
Jul 09 Javascript
javascript suggest效果 自动完成实现代码分享
Feb 17 Javascript
基于OO的动画附加插件,可以实现弹跳、渐隐等动画效果 分享
Jun 24 Javascript
AJAX跨域请求json数据的实现方法
Nov 11 Javascript
Jquery Post处理后不进入回调的原因及解决方法
Jul 15 Javascript
js实现精确到毫秒的倒计时效果
Aug 05 Javascript
javascript实现获取图片大小及图片等比缩放的方法
Nov 24 Javascript
JavaScript中附件预览功能实现详解(推荐)
Aug 15 Javascript
Angular7.2.7路由使用初体验
Mar 01 Javascript
vue实现图片按比例缩放问题操作
Aug 11 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
smarty基础之拼接字符串的详解
2013/06/18 PHP
PHP生成随机密码4种方法及性能对比
2020/12/11 PHP
JavaScript中“+=”的应用
2007/02/02 Javascript
JS的反射问题
2010/04/07 Javascript
JS的参数传递示例介绍
2014/02/08 Javascript
JavaScript实现点击按钮直接打印
2016/01/06 Javascript
React Native第三方平台分享的实例(Android,IOS双平台)
2017/08/04 Javascript
JS运动特效之任意值添加运动的方法分析
2018/01/24 Javascript
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
vue实现员工信息录入功能
2020/06/11 Javascript
vue-router 按需加载 component: () =&gt; import() 报错的解决
2020/09/22 Javascript
[15:23]教你分分钟做大人:虚空假面
2014/10/30 DOTA
python实现颜色空间转换程序(Tkinter)
2015/12/31 Python
python绘制立方体的方法
2018/07/02 Python
Python mutiprocessing多线程池pool操作示例
2019/01/30 Python
Transpose 数组行列转置的限制方式
2020/02/11 Python
django 模型字段设置默认值代码
2020/07/15 Python
Pandas的数据过滤实现
2021/01/15 Python
美国蔬菜和植物种子公司:Burpee
2017/02/01 全球购物
将时尚融入珠宝:Adornmonde
2019/10/17 全球购物
大学生毕业自我鉴定范文
2013/09/19 职场文书
爷爷追悼会答谢词
2014/01/24 职场文书
美术教师自我鉴定
2014/02/12 职场文书
秋季运动会广播稿
2014/02/22 职场文书
计算机网络工程专业职业生涯规划书
2014/03/10 职场文书
支行行长竞聘演讲稿
2014/05/15 职场文书
专题组织生活会方案
2014/06/15 职场文书
党性锻炼的心得体会
2014/09/03 职场文书
校园文化艺术节宣传标语
2014/10/09 职场文书
2014年学习部工作总结
2014/11/12 职场文书
房产公证书格式
2015/01/26 职场文书
如何写好一份优秀的工作总结?
2019/06/21 职场文书
ajax请求前端跨域问题原因及解决方案
2021/10/16 Javascript
千万级用户系统SQL调优实战分享
2022/03/03 MySQL
Golang 字符串的常见操作
2022/04/19 Golang
React自定义hook的方法
2022/06/25 Javascript