简洁短小的 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 调试利器 Firebug使用详解六
Jul 05 Javascript
JavaScript调用Activex控件的事件的实现方法
Apr 11 Javascript
Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板中
Oct 29 Javascript
jquery 操作DOM案例代码分享
Apr 05 Javascript
扩展JavaScript功能的正确方法(译文)
Apr 12 Javascript
form表单中去掉默认的enter键提交并绑定js方法实现代码
Apr 01 Javascript
jQuery新的事件绑定机制on()示例应用
Jul 18 Javascript
jquery 实现两Select 标签项互调示例代码
Sep 25 Javascript
javascript实现修改微信分享的标题内容等
Dec 11 Javascript
详解JavaScript中shift()方法的使用
Jun 09 Javascript
angular4实现tab栏切换的方法示例
Oct 21 Javascript
JS中touchstart事件与click事件冲突的解决方法
Mar 12 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支持多种格式图片上传(支持jpg、png、gif)
2011/11/03 PHP
php使用curl获取https请求的方法
2015/02/11 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
laravel解决迁移文件一次删除创建字段报错的问题
2019/10/24 PHP
PHP正则表达式函数preg_replace用法实例分析
2020/06/04 PHP
动态创建样式表在各浏览器中的差异测试代码
2011/09/13 Javascript
一个分享按钮的插件使用介绍(可扩展,内附开发制作流程)
2011/09/19 Javascript
js图片向右一张张滚动效果实例代码
2013/11/23 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
2014/07/29 Javascript
jQuery插件jquery-barcode实现条码打印的方法
2015/11/25 Javascript
使用RequireJS库加载JavaScript模块的实例教程
2016/06/06 Javascript
JS实现的适合做faq或menu滑动效果示例
2016/11/17 Javascript
解决layui前端框架 form表单,table表等内置控件不显示的问题
2018/08/19 Javascript
vue开发中遇到的问题总结
2020/04/07 Javascript
浅谈nuxtjs校验登录中间件和混入(mixin)
2020/11/06 Javascript
[38:32]完美世界DOTA2联赛循环赛 Forest vs DM 第二场 11.06
2020/11/06 DOTA
python读文件逐行处理的示例代码分享
2013/12/27 Python
python基础教程之对象和类的实际运用
2014/08/29 Python
简单讲解Python中的字符串与字符串的输入输出
2016/03/13 Python
python引入导入自定义模块和外部文件的实例
2017/07/24 Python
python监控linux内存并写入mongodb(推荐)
2017/09/11 Python
Python 字符串与数字输出方法
2018/07/16 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
2019/05/15 Python
Flask框架中request、请求钩子、上下文用法分析
2019/07/23 Python
Python爬虫教程知识点总结
2020/10/19 Python
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
巴西儿童时尚购物网站:Dinda
2019/08/14 全球购物
荷兰度假屋租赁网站:Aan Zee
2020/02/28 全球购物
企划主管岗位职责
2013/12/12 职场文书
一份婚庆公司创业计划书
2014/01/11 职场文书
领导证婚人证婚词
2014/01/13 职场文书
社会学专业求职信
2014/02/24 职场文书
安全生产责任书范本
2014/04/15 职场文书
求职信怎么写
2014/05/23 职场文书
2015年学校食堂工作总结
2015/04/22 职场文书
如何书写读后感?(附范文)
2019/07/26 职场文书