简洁短小的 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 相关文章推荐
jquery png 透明解决方案(推荐)
Aug 21 Javascript
Jquery attr()方法 属性赋值和属性获取详解
Apr 15 Javascript
微信小程序 获取相册照片实例详解
Nov 16 Javascript
浅谈angular4 ng-content 中隐藏的内容
Aug 18 Javascript
vue.js select下拉框绑定和取值方法
Mar 03 Javascript
AngularJS下$http服务Post方法传递json参数的实例
Mar 29 Javascript
Vue+axios实现统一接口管理的方法
Jul 23 Javascript
浅谈Vue页面级缓存解决方案feb-alive(上)
Apr 14 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
Apr 26 Javascript
vue-iview动态新增和删除的方法
Jun 17 Javascript
微信小程序canvas动态时钟
Oct 22 Javascript
js实现模拟购物商城案例
May 18 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
星际玩家的三大定律
2020/03/04 星际争霸
关于php程序报date()警告的处理(date_default_timezone_set)
2013/10/22 PHP
PHP程序漏洞产生的原因分析与防范方法说明
2014/03/06 PHP
PHP中读取文件的几个方法总结(推荐)
2016/06/03 PHP
python进程与线程小结实例分析
2018/11/11 PHP
JQUERY 对象与DOM对象之两者相互间的转换
2009/04/27 Javascript
jquery animate 动画效果使用说明
2009/11/04 Javascript
用js解决数字不能换行问题
2010/08/10 Javascript
根据json字符串生成Html的一种方式
2013/01/09 Javascript
jQuery带时间的日期控件代码分享
2015/08/26 Javascript
10个很棒的jQuery代码片段
2015/09/24 Javascript
谈一谈JS消息机制和事件机制的理解
2016/04/14 Javascript
JS添加或修改控件的样式(Class)实现方法
2016/10/15 Javascript
JavaScript模仿Pinterest实现图片预加载功能
2016/10/25 Javascript
vue项目中做编辑功能传递数据时遇到问题的解决方法
2016/12/19 Javascript
Reactjs实现通用分页组件的实例代码
2017/01/19 Javascript
JS实现移动端按首字母检索城市列表附源码下载
2017/07/05 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
2019/08/12 Javascript
通过vue写一个瀑布流插件代码实例
2019/09/07 Javascript
微信小程序基于movable-view实现滑动删除效果
2020/01/08 Javascript
JQuery使用数组遍历跳出each循环
2020/09/01 jQuery
vue打包静态资源后显示空白及static文件路径报错的解决
2020/09/02 Javascript
Python爬虫番外篇之Cookie和Session详解
2017/12/27 Python
基于python神经卷积网络的人脸识别
2018/05/24 Python
一行代码让 Python 的运行速度提高100倍
2018/10/08 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
2019/03/14 Python
Django创建一个后台的基本步骤记录
2020/10/02 Python
Adobe Html5 Extension开发初体验图文教程
2017/11/14 HTML / CSS
L*SPACE官网:比基尼、泳装和度假服装
2019/03/18 全球购物
心理健康教育制度
2014/01/27 职场文书
党的群众路线教育实践活动公开承诺书
2014/03/28 职场文书
安全标语大全
2014/06/10 职场文书
2014年教学管理工作总结
2014/12/02 职场文书
MySql新手入门的基本操作汇总
2021/05/13 MySQL
MATLAB 全景图切割及盒图显示的实现步骤
2021/05/14 Python
python munch库的使用解析
2021/05/25 Python