解读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 相关文章推荐
自己动手制作jquery插件之自动添加删除行的实现
Oct 13 Javascript
jquery ajax方式直接提交整个表单核心代码
Aug 15 Javascript
JavaScript实现给定时间相加天数的方法
Jan 25 Javascript
JS和jQuery使用submit方法无法提交表单的原因分析及解决办法
May 17 Javascript
使用Ajax与服务器(JSON)通信实例
Nov 04 Javascript
浅谈Node.js:fs文件系统模块
Dec 08 Javascript
javascript容错处理代码(屏蔽js错误)
Jan 20 Javascript
VeeValidate 的使用场景以及配置详解
Jan 11 Javascript
Vue.set 全局操作简单示例
Sep 19 Javascript
Vue 刷新当前路由的实现代码
Sep 26 Javascript
jQuery实现滑动星星评分效果(每日分享)
Nov 13 jQuery
jquery实现简单每周轮换的日历
Sep 10 jQuery
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
基于Zookeeper的使用详解
2013/05/02 PHP
ThinkPHP采用原生query实现关联查询left join实例
2014/12/02 PHP
PHP 实现代码复用的一个方法 traits新特性
2015/02/22 PHP
php中类和对象:静态属性、静态方法
2017/04/09 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
jquery删除数据记录时的弹出提示效果
2014/05/06 Javascript
js上传图片及预览功能实例分析
2015/04/24 Javascript
jquery实现点击展开列表同时隐藏其他列表
2015/08/10 Javascript
基于JavaScript实现一定时间后去执行一个函数
2015/12/14 Javascript
数据结构中的各种排序方法小结(JS实现)
2016/07/23 Javascript
纯js三维数组实现三级联动效果
2017/02/07 Javascript
Bootstrap的popover(弹出框)2秒后定时消失的实现代码
2017/02/27 Javascript
react.js CMS 删除功能的实现方法
2017/04/17 Javascript
详解IWinter 一个路由转控制器的 Nodejs 库
2017/11/15 NodeJs
element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】
2018/11/20 Javascript
详解Js里的for…in和for…of的用法
2019/03/28 Javascript
Vue 实现html中根据类型显示内容
2019/10/28 Javascript
Kettle中使用JavaScrip调用jar包对文件内容进行MD5加密的操作方法
2020/09/04 Javascript
js+h5 canvas实现图片验证码
2020/10/11 Javascript
基于JavaScript实现轮播图效果
2021/01/02 Javascript
python获取豆瓣电影简介代码分享
2014/01/16 Python
python循环监控远程端口的方法
2015/03/14 Python
Pyspider中给爬虫伪造随机请求头的实例
2018/05/07 Python
Pandas之ReIndex重新索引的实现
2019/06/25 Python
为什么黑客都用python(123个黑客必备的Python工具)
2020/01/31 Python
在Keras中利用np.random.shuffle()打乱数据集实例
2020/06/15 Python
Python3.8安装Pygame教程步骤详解
2020/08/14 Python
前端水印的简单实现代码示例
2020/12/02 HTML / CSS
护理工作感言
2014/01/16 职场文书
公务员职业生涯规划书范文  
2014/01/19 职场文书
学生拾金不昧表扬信
2014/01/21 职场文书
求职面试个人自我评价
2014/02/28 职场文书
《大海那边》教学反思
2014/04/09 职场文书
2014报到证办理个人委托书
2014/10/08 职场文书
城南旧事观后感
2015/06/11 职场文书
能让Python提速超40倍的神器Cython详解
2021/06/24 Python