简洁短小的 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下阻止表单重复提交、防刷新、防后退
Aug 17 Javascript
jquery live()重复绑定的解决方法介绍
Jan 03 Javascript
jQuery如何防止这种冒泡事件发生
Feb 27 Javascript
JavaScript简单生成 N~M 之间随机数的方法
Jan 13 Javascript
利用vue.js插入dom节点的方法
Mar 15 Javascript
12个非常有用的JavaScript技巧
May 17 Javascript
vue的安装及element组件的安装方法
Mar 09 Javascript
jQuery 同时获取多个标签的指定内容并储存为数组
Nov 20 jQuery
jQuery+css last-child实现选择最后一个子元素操作示例
Dec 10 jQuery
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
Oct 28 Javascript
Node.js API详解之 tty功能与用法实例分析
Apr 27 Javascript
使用JavaScript实现贪吃蛇游戏
Sep 29 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
用缓存实现静态页面的测试
2006/12/06 PHP
PHP中copy on write写时复制机制介绍
2014/05/13 PHP
php实现分页显示
2015/11/03 PHP
Thinkphp实现自动验证和自动完成
2015/12/19 PHP
PHP convert_uudecode()函数讲解
2019/02/14 PHP
jQuery获取和设置表单元素的方法
2014/02/14 Javascript
jqeury-easyui-layout问题解决方法
2014/03/24 Javascript
Javascript 构造函数详解
2014/10/22 Javascript
jQuery插件jPaginate实现无刷新分页
2015/05/04 Javascript
JavaScript实现鼠标滑过处生成气泡的方法
2015/05/16 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
js实现div模拟模态对话框展现URL内容
2016/05/27 Javascript
浅析Nodejs npm常用命令
2016/06/14 NodeJs
JS实现的自定义显示加载等待图片插件(loading.gif)
2016/06/17 Javascript
BootstrapValidator不触发校验的实现代码
2016/09/28 Javascript
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
Electron 如何调用本地模块的方法
2019/02/01 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
浅谈JavaScript中this的指向问题
2020/07/28 Javascript
JS实现拖动模糊框特效
2020/08/25 Javascript
解决vue watch数据的方法被调用了两次的问题
2020/11/07 Javascript
[02:27]刀塔重生降临
2015/10/14 DOTA
[01:11:21]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第三场 3月7日
2021/03/11 DOTA
零基础写python爬虫之爬虫编写全记录
2014/11/06 Python
在Python中用keys()方法返回字典键的教程
2015/05/21 Python
Python实现判断字符串中包含某个字符的判断函数示例
2018/01/08 Python
css3截图_动力节点Java学院整理
2017/07/11 HTML / CSS
使用PDF.JS插件在HTML中预览PDF文件的方法
2018/08/29 HTML / CSS
SOKOLOV官网:俄罗斯珠宝首饰品牌
2021/01/02 全球购物
写自荐信要注意什么
2013/12/26 职场文书
七年级数学教学反思
2014/01/22 职场文书
森林防火标语
2014/06/23 职场文书
八项规定自查自纠报告及整改措施
2014/10/26 职场文书
三严三实·严以律己心得体会
2016/01/13 职场文书
如何书写你的职业生涯规划书?
2019/06/27 职场文书
经典《舰娘》游改全新动画预告 预定11月开播
2022/04/01 日漫