解读JavaScript代码 var ie = !-[1,] 最短的IE判定代码


Posted in Javascript onMay 28, 2011

var ie = !-[1,];

    这句代码在IE9之前曾被称为世界上最短的IE判定代码。代码虽短但确包含了不少javascript基础知识在里面。在这个例子中代码执行时会先调用数组的toString()方法 ,执行[1,].toString()在IE6,7,8中将会得到“1,”。然后表达式就变为!-“1,”。再尝试把“1,”转换成数值类型得到NaN ,再对NaN取负得到值仍为NaN。最后执行!NaN返回true。下面通过分解这个语句来回顾下代码中所涉及到的javascript知识:

浏览器的数组字面量解析差异

     [1,]表示使用javascript的数组字面量定义了一个数组。 在IE6,7,8中数组有两个元素,数组中的值分别为1,undefined。在标准的浏览器中会忽略第一个元素后的undefined,数组只包含一个元素1。

数组的toString()方法

    调用数组对象的toString()方法时会对数组中的每个元素调用toString()方法,如果元素的值为NULL或者undefined时会返回空的字符串,然后将得到的每项的值拼成一个使用 逗号“,”分隔的字符串。

 一元减号运算符  

  使用一元减号运算符时如果运算数是数值类型则直接对运算数取负,否则会先尝试把运算数转换为数值类型,转换过程相当于执行Number函数,然后再对得到的结果取负。 

逻辑非运算

    执行逻辑非运算时如果操作数为NaN、NULL或undefined 时返回 true。

通过上面的知识可以得出代码 var ie = !-[1,]; 其实等价于 var ie = !(-Number([1,].toString())); 在IE6\7\8中值为true。如分析的有什么不对的地方或者有什么不同意见欢迎指正!

Javascript 相关文章推荐
javascript实现的listview效果
Apr 28 Javascript
js传中文参数controller里获取参数乱码问题解决方法
Jan 03 Javascript
js 加密压缩出现bug解决方案
Nov 25 Javascript
JavaScript操作Oracle数据库示例
Mar 06 Javascript
利用js实现禁止复制文本信息
Jun 03 Javascript
JS简单实现表格排序功能示例
Dec 20 Javascript
jQuery+PHP+Mysql实现抽奖程序
Apr 12 jQuery
js中innerText/textContent和innerHTML与target和currentTarget的区别
Jan 21 Javascript
微信小程序实现页面浮动导航
Jan 28 Javascript
Javascript之高级数组API的使用实例
Mar 08 Javascript
简单学习5种处理Vue.js异常的方法
Jun 17 Javascript
浅谈vue中resetFields()使用注意事项
Aug 12 Javascript
Jquery css函数用法(判断标签是否拥有某属性)
May 28 #Javascript
最新28个很棒的jQuery 教程
May 28 #Javascript
JavaScript使用IEEE 标准进行二进制浮点运算产生莫名错误的解决方法
May 28 #Javascript
真正的JQuery.ajax传递中文参数的解决方法
May 28 #Javascript
jquery 图片上传按比例预览插件集合
May 28 #Javascript
使用jquery实现select添加实现后台权限添加的效果
May 28 #Javascript
jQuery 源码分析笔记(2) 变量列表
May 28 #Javascript
You might like
PHP学习 运算符与运算符优先级
2008/06/15 PHP
PHP实现返回JSON和XML的类分享
2015/01/28 PHP
doctype后如何获得body.clientHeight的方法
2007/07/11 Javascript
爆炸式的JS圆形浮动菜单特效代码
2010/03/03 Javascript
基于jquery DOM写的类似微博发布的效果
2012/10/20 Javascript
JS操作数据库的实例代码
2013/10/17 Javascript
在javaScript中关于submit和button的区别介绍
2013/10/20 Javascript
jquery toolbar与网页浮动工具条具体实现代码
2014/01/12 Javascript
iframe窗口高度自适应的又一个巧妙实现思路
2014/04/04 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
Node.js插件的正确编写方式
2014/08/03 Javascript
JavaScript中的对象与JSON
2015/07/03 Javascript
JS实现仿微博可关闭弹出层效果
2015/09/21 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
Node.JS中事件轮询(Event Loop)的解析
2017/02/25 Javascript
vue 2.0组件与v-model详解
2017/03/27 Javascript
详解JavaScript 作用域
2020/07/14 Javascript
JS操作JSON常用方法(10w阅读)
2020/12/06 Javascript
[02:49]DOTA2完美大师赛首日观众采访
2017/11/23 DOTA
[28:57]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/16 DOTA
Linux上安装Python的PIL和Pillow库处理图片的实例教程
2016/06/23 Python
Python中装饰器兼容加括号和不加括号的写法详解
2017/07/05 Python
Python实现的多线程同步与互斥锁功能示例
2017/11/30 Python
python正则实现计算器功能
2017/12/14 Python
Python解决八皇后问题示例
2018/04/22 Python
python字典一键多值实例代码分享
2019/06/14 Python
Python将主机名转换为IP地址的方法
2019/08/14 Python
10款最佳Python开发工具推荐,每一款都是神器
2020/10/15 Python
纯CSS3+DIV实现小三角形边框效果的示例代码
2020/08/03 HTML / CSS
英国办公用品商店:Office Outlet
2018/04/04 全球购物
《老山界》教学反思
2014/04/08 职场文书
企业趣味活动方案
2014/08/21 职场文书
2014年大学学生会工作总结
2014/12/02 职场文书
2016应届毕业生实习心得体会
2015/10/09 职场文书
css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效
2021/04/29 HTML / CSS
MySQL中一条SQL查询语句是如何执行的
2022/04/08 MySQL