解读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 相关文章推荐
代码触发js事件(click、change)示例应用
Dec 13 Javascript
纯javascript实现简单下拉刷新功能
Mar 13 Javascript
jquery插件orbit.js实现图片折叠轮换特效
Apr 14 Javascript
js代码实现无缝滚动(文字和图片)
Aug 20 Javascript
jquery.mousewheel实现整屏翻屏效果
Aug 30 Javascript
基于JS实现数字+字母+中文的混合排序方法
Jun 06 Javascript
JavaScript简单实现弹出拖拽窗口(一)
Jun 17 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
Sep 16 Javascript
jQuery解析XML 详解及方法总结
Sep 28 Javascript
jQuery webuploader分片上传大文件
Nov 07 Javascript
vue 路由页面之间实现用手指进行滑动的方法
Feb 23 Javascript
如何在Express4.x中愉快地使用async的方法
Nov 18 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 自定义错误处理函数trigger_error()
2013/03/26 PHP
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
2013/05/15 PHP
php常用图片处理类
2016/03/16 PHP
location对象的属性和方法应用(解析URL)
2013/04/12 Javascript
jquery toolbar与网页浮动工具条具体实现代码
2014/01/12 Javascript
js中的如何定位固定层的位置
2014/06/15 Javascript
jQuery通过扩展实现抖动效果的方法
2015/03/11 Javascript
实现音乐播放器的代码(html5+css3+jquery)
2015/08/04 Javascript
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
2017/01/12 NodeJs
在 Angular2 中实现自定义校验指令(确认密码)的方法
2017/01/23 Javascript
JavaScript中for循环的几种写法与效率总结
2017/02/03 Javascript
underscore之Collections_动力节点Java学院整理
2017/07/10 Javascript
微信小程序开发之tabbar图标和颜色的实现
2018/10/17 Javascript
JavaScript 性能提升之路(推荐)
2019/04/10 Javascript
更优雅的微信小程序骨架屏实现详解
2019/08/07 Javascript
js数组中去除重复值的几种方法
2020/08/03 Javascript
Vue elementui字体图标显示问题解决方案
2020/08/18 Javascript
Vue前端判断数据对象是否为空的实例
2020/09/02 Javascript
[02:26]2018DOTA2亚洲邀请赛赛前采访-Newbee篇
2018/04/03 DOTA
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
python 动态加载的实现方法
2017/12/22 Python
解决Python中定时任务线程无法自动退出的问题
2019/02/18 Python
python爬虫 urllib模块url编码处理详解
2019/08/20 Python
浅析Python中字符串的intern机制
2020/10/03 Python
python批量生成条形码的示例
2020/10/10 Python
python3列表删除大量重复元素remove()方法的问题详解
2021/01/04 Python
法国在线药房:Shop Pharmacie
2019/11/26 全球购物
新加坡第一的杂货零售商:NTUC FairPrice
2020/12/05 全球购物
初三新学期计划书
2014/05/03 职场文书
基层党员公开承诺书
2014/05/29 职场文书
物流专业求职信
2014/06/30 职场文书
个人三严三实对照检查材料思想汇报
2014/09/22 职场文书
教师党员个人剖析材料
2014/09/29 职场文书
《丑小鸭》教学反思
2016/02/19 职场文书
学会用Python实现滑雪小游戏,再也不用去北海道啦
2021/05/20 Python
如何避免mysql启动时错误及sock文件作用分析
2022/01/22 MySQL