简洁短小的 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 相关文章推荐
Javascript this指针
Jul 30 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
Dec 31 Javascript
js实现按钮控制图片360度翻转特效的方法
Feb 17 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
Dec 02 Javascript
整理Javascript事件响应学习笔记
Dec 02 Javascript
jQuery Validate表单验证入门学习
Dec 18 Javascript
ES6新数据结构Set与WeakSet用法分析
Mar 31 Javascript
js用类封装pop弹窗组件
Oct 08 Javascript
解决Mac下安装nmp的淘宝镜像失败问题
May 16 Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
Aug 08 jQuery
详解js访问对象的属性和方法
Oct 25 Javascript
vue调试工具vue-devtools安装及使用方法
Nov 07 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
咖啡的种类和口感
2021/03/03 新手入门
Apache中php.ini的设置方法
2013/02/28 PHP
用javascript实现的激活输入框后隐藏初始内容
2007/06/29 Javascript
javascript分页代码实例分享(js分页)
2013/12/13 Javascript
javascript实现页面内关键词高亮显示代码
2014/04/03 Javascript
Bootstrap选项卡与Masonry插件的完美结合
2016/07/06 Javascript
基于BootStrap环境写jQuery tabs插件
2016/07/12 Javascript
AngularJS 依赖注入详解及示例代码
2016/08/17 Javascript
vue-star评星组件开发实例
2018/03/01 Javascript
vue中使用element-ui进行表单验证的实例代码
2018/06/22 Javascript
node和vue实现商城用户地址模块
2018/12/05 Javascript
Angular8路由守卫原理和使用方法
2019/08/29 Javascript
记一次react前端项目打包优化的方法
2020/03/30 Javascript
24个ES6方法解决JS实际开发问题(小结)
2020/05/31 Javascript
[55:47]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第三局
2016/02/27 DOTA
Python算法输出1-9数组形成的结果为100的所有运算式
2017/11/03 Python
PyQt5实现从主窗口打开子窗口的方法
2019/06/19 Python
简单了解python的内存管理机制
2019/07/08 Python
Django REST Framework之频率限制的使用
2019/09/29 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
Numpy中对向量、矩阵的使用详解
2019/10/29 Python
使用tqdm显示Python代码执行进度功能
2019/12/08 Python
Python 实现键盘鼠标按键模拟
2020/11/18 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
2021/01/08 Python
html5 input属性使用示例
2013/06/28 HTML / CSS
JD Sports澳洲官网:英国领先的运动鞋和运动时尚零售商
2020/02/15 全球购物
介绍下static、final、abstract区别
2015/01/30 面试题
2014年计算机专业个人自我评价
2014/01/19 职场文书
感恩节活动策划方案
2014/05/16 职场文书
2014年新教师工作总结
2014/11/08 职场文书
教师“一帮一”结对子活动总结
2015/05/07 职场文书
2019思想汇报范文
2019/05/21 职场文书
《和时间赛跑》读后感3篇
2019/12/16 职场文书
laravel ajax curd 搜索登录判断功能的实现
2021/04/17 PHP
html5 录制mp3音频支持采样率和比特率设置
2021/07/15 Javascript
关于springboot 配置date字段返回时间戳的问题
2021/07/25 Java/Android