简洁短小的 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 json2 使用方法
Mar 16 Javascript
24款热门实用的jQuery插件推荐
Dec 24 Javascript
window.open()实现post传递参数
Mar 12 Javascript
jQuery easyui刷新当前tabs的方法
Sep 23 Javascript
JavaScript浮点数及运算精度调整详解
Oct 21 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
Feb 15 Javascript
Node.Js生成比特币地址代码解析
Apr 21 Javascript
关于vue编译版本引入的问题的解决
Sep 17 Javascript
iView-admin 动态路由问题的解决方法
Oct 03 Javascript
vue ssr 实现方式(学习笔记)
Jan 18 Javascript
Vue3不支持Filters过滤器的问题
Sep 24 Javascript
React实现动效弹窗组件
Jun 21 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
Windows2003 下 MySQL 数据库每天自动备份
2006/12/21 PHP
PHP 页面跳转到另一个页面的多种方法方法总结
2009/07/07 PHP
为PHP初学者的8点有效建议
2010/11/20 PHP
分享常见的几种页面静态化的方法
2015/01/08 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
2017/03/15 PHP
thinkphp框架page类与bootstrap分页(美化)
2017/06/25 PHP
PHP实现PDO操作mysql存储过程示例
2019/02/13 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
Javascript学习笔记4 Eval函数
2010/01/11 Javascript
Javascript的并行运算实现代码
2010/11/19 Javascript
jquery 学习之二 属性 文本与值(text,val)
2010/11/25 Javascript
Firefox/Chrome/Safari的中可直接使用$/$$函数进行调试
2012/02/13 Javascript
根据json字符串生成Html的一种方式
2013/01/09 Javascript
JavaScript:new 一个函数和直接调用函数的区别分析
2013/07/10 Javascript
基于Bootstrap+jQuery.validate实现Form表单验证
2014/12/16 Javascript
js实现Form栏显示全格式时间时钟效果代码
2015/08/19 Javascript
OpenLayers3实现对地图的基本操作
2020/09/28 Javascript
js实现圆形菜单选择器
2020/12/03 Javascript
python中的列表推导浅析
2014/04/26 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
2017/12/20 Python
python实现简单登陆系统
2018/10/18 Python
windows下安装Python虚拟环境virtualenvwrapper-win
2019/06/14 Python
opencv转换颜色空间更改图片背景
2019/08/20 Python
python 画出使用分类器得到的决策边界
2019/08/21 Python
Python字典的概念及常见应用实例详解
2019/10/30 Python
浅谈CSS3 box-sizing 属性 有趣的盒模型
2019/04/02 HTML / CSS
高中生学习生活的自我评价
2013/11/27 职场文书
投标邀请书范文
2014/01/31 职场文书
工商管理专业自荐信
2014/06/03 职场文书
医院节能减排方案
2014/06/13 职场文书
高中生旷课检讨书
2014/10/08 职场文书
个人先进事迹材料
2014/12/29 职场文书
2015年工程部工作总结
2015/04/30 职场文书
redis通过6379端口无法连接服务器(redis-server.exe闪退)
2021/05/08 Redis
Python下opencv使用hough变换检测直线与圆
2021/06/18 Python
Apache Hudi集成Spark SQL操作hide表
2022/03/31 Servers