简洁短小的 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判断浏览器的比较全的代码
Feb 13 Javascript
jquery 延迟执行实例介绍
Aug 20 Javascript
jQuery对于显示和隐藏等常用状态的判断方法
Dec 13 Javascript
jquery手风琴特效插件
Feb 04 Javascript
javascript异步处理工作机制详解
Apr 13 Javascript
javascript控制层显示或隐藏的方法
Jul 22 Javascript
jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法
Aug 07 Javascript
jQuery实现的淡入淡出二级菜单效果代码
Sep 15 Javascript
JS Ajax请求如何防止重复提交
Jun 13 Javascript
js模拟支付宝密码输入框
Apr 11 Javascript
微信小程序中使用Async-await方法异步请求变为同步请求方法
Mar 28 Javascript
js+css实现全屏侧边栏
Jun 16 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
解析CodeIgniter自定义配置文件
2013/06/18 PHP
浅析php过滤html字符串,防止SQL注入的方法
2013/07/02 PHP
php判断是否为json格式的方法
2014/03/04 PHP
ThinkPHP Mobile使用方法简明教程
2014/06/18 PHP
PHP截取IE浏览器并缩小原图的方法
2016/03/04 PHP
PHP中的Trait 特性及作用
2016/04/03 PHP
PHP单例模式详解及实例代码
2016/12/21 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
2019/04/09 PHP
php swoole多进程/多线程用法示例【基于php7nts版】
2019/08/12 PHP
Javascript面向对象扩展库代码分享
2012/03/27 Javascript
从数据库读取数据后将其输出成html标签的三种方法
2014/10/13 Javascript
在AngularJS应用中实现一些动画效果的代码
2015/06/18 Javascript
基于jQuery实现的向下滑动二级菜单效果代码
2015/08/31 Javascript
TinyMCE汉化及本地上传图片功能实例详解
2016/05/31 Javascript
Angular ng-repeat遍历渲染完页面后执行其他操作详细介绍
2016/12/13 Javascript
在小程序中使用Echart图表的示例代码
2018/08/02 Javascript
详解Angular模板引用变量及其作用域
2018/11/23 Javascript
sharp.js安装过程中遇到的问题总结
2020/04/02 Javascript
浅谈vue单页面中有多个echarts图表时的公用代码写法
2020/07/19 Javascript
python3 实现对图片进行局部切割的方法
2018/12/05 Python
python+logging+yaml实现日志分割
2019/07/22 Python
对python中url参数编码与解码的实例详解
2019/07/25 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
2020/03/10 Python
python实现最短路径的实例方法
2020/07/19 Python
Lookfantastic德国官网:英国知名美妆购物网站
2017/06/11 全球购物
免税水晶:Duty Free Crystal
2019/05/13 全球购物
日本酒店、民宿、温泉旅馆、当地旅行团中文预订:e路东瀛
2019/12/09 全球购物
可以在一个PHP文件里面include另外一个PHP文件两次吗
2015/05/22 面试题
2014年乡镇植树节活动方案
2014/02/28 职场文书
代理协议书范本
2014/04/22 职场文书
机械系毕业生求职信
2014/05/28 职场文书
入党函调证明材料
2015/06/19 职场文书
机械原理课程设计心得体会
2016/01/15 职场文书
如何用JavaScipt测网速
2021/05/09 Javascript
pandas中DataFrame检测重复值的实现
2021/05/26 Python
Python代码实现双链表
2022/05/25 Python