简洁短小的 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获得服务器端控件的ID的实现代码
Dec 28 Javascript
javascript学习笔记(十四) window对象使用介绍
Jun 20 Javascript
jQuery实现购物车计算价格功能的方法
Mar 25 Javascript
javascript实现漂亮的拖动层,窗口拖拽特效
Apr 24 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
Jan 01 Javascript
微信小程序 数据交互与渲染实例详解
Jan 21 Javascript
JS实现提交表单前的数字及邮箱校检功能
Nov 13 Javascript
利用vue和element-ui设置表格内容分页的实例
Mar 02 Javascript
Bootstrap 中data-[*] 属性的整理
Mar 13 Javascript
Vue 页面切换效果之 BubbleTransition(推荐)
Apr 08 Javascript
JavaScript鼠标拖拽事件详解
Apr 03 Javascript
openlayers实现图标拖动获取坐标
Sep 25 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
PHP+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
2007/02/15 PHP
PHP 变量定义和变量替换的方法
2009/07/30 PHP
PHP file_exists问题杂谈
2012/05/07 PHP
php使用文本统计访问量的方法
2016/05/12 PHP
PHP版单点登陆实现方案的实例
2016/11/17 PHP
PHP实现阿里大鱼短信验证的实例代码
2017/07/10 PHP
PHP7 list() 函数修改
2021/03/09 PHP
基于jQuery的仿flash的广告轮播代码
2010/11/04 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
再谈javascript原型继承
2014/11/10 Javascript
15款jQuery分布引导插件分享
2015/02/04 Javascript
javascript正则表达式中的replace方法详解
2015/04/20 Javascript
Angular Js文件上传之form-data
2015/08/28 Javascript
jQuery实现可高亮显示的二级CSS菜单效果
2015/09/01 Javascript
Angular设置title信息解决SEO方面存在问题
2016/08/19 Javascript
javascript构造函数以及原型对象的理解
2017/01/13 Javascript
jQuery点击弹出层弹出模态框点击模态框消失代码分享
2017/01/21 Javascript
JS简单实现获取元素的封装操作示例
2017/04/07 Javascript
angular 内存溢出的问题解决
2018/07/12 Javascript
node express使用HTML模板的方法示例
2019/08/22 Javascript
layui表单验证select下拉框实现验证的方法
2019/09/05 Javascript
基于JavaScript实现单例模式
2019/10/30 Javascript
JS数组转字符串实现方法解析
2020/09/04 Javascript
Python实现的数据结构与算法之基本搜索详解
2015/04/22 Python
对pandas的层次索引与取值的新方法详解
2018/11/06 Python
python url 参数修改方法
2018/12/26 Python
python处理RSTP视频流过程解析
2020/01/11 Python
django 取消csrf限制的实例
2020/03/13 Python
纯CSS3实现鼠标滑过按钮动画第二节
2020/07/16 HTML / CSS
市场开发与营销专业求职信
2013/12/31 职场文书
爱国卫生月实施方案
2014/02/21 职场文书
2014年依法行政工作总结
2014/11/19 职场文书
2014个人年度工作总结范文
2014/12/24 职场文书
综治目标管理责任书
2015/05/11 职场文书
SpringBoot 集成短信和邮件 以阿里云短信服务为例
2022/04/22 Java/Android