解读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 表单取值常用代码
Dec 22 Javascript
Ajax 数据请求的简单分析
Apr 05 Javascript
解析Javascript中难以理解的11个问题
Dec 09 Javascript
js 采用delete实现继承示例代码
May 20 Javascript
输入框过滤非数字的js代码
Sep 18 Javascript
javascript求日期差的方法
Mar 02 Javascript
jQuery.Validate表单验证插件的使用示例详解
Jan 04 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
May 11 Javascript
详谈JS中数组的迭代方法和归并方法
Aug 11 Javascript
小程序实现列表多个批量倒计时
Jan 29 Javascript
vue实现评价星星功能
Jun 30 Javascript
js实现全选和全不选功能
Jul 28 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
PHP5中MVC结构学习
2006/10/09 PHP
php skymvc 一款轻量、简单的php
2011/06/28 PHP
PHP实现批量上传单个文件
2015/12/29 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
基于php实现的验证码小程序
2016/12/13 PHP
PHP串行化与反串行化实例分析
2016/12/27 PHP
ThinkPHP 3使用OSS的方法
2018/07/19 PHP
js获取url参数的使用扩展实例
2007/12/29 Javascript
fireworks菜单生成器mm_menu.js在 IE 7.0 显示问题的解决方法
2009/10/20 Javascript
jQuery队列控制方法详解queue()/dequeue()/clearQueue()
2010/12/02 Javascript
js自动闭合html标签(自动补全html标记)
2012/10/04 Javascript
Node.js安装教程和NPM包管理器使用详解
2014/08/16 Javascript
jQuery控制网页打印指定区域的方法
2015/04/07 Javascript
浅析JS操作DOM的一些常用方法
2016/05/13 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
有趣的bootstrap走动进度条
2016/12/01 Javascript
js验证手机号、密码、短信验证码代码工具类
2020/06/24 Javascript
AngularJS路由删除#符号解决的办法
2017/09/28 Javascript
CKEditor4配置与开发详细中文说明文档
2018/10/08 Javascript
详解JavaScript 为什么要有 Symbol 类型?
2019/04/03 Javascript
基于vue-cli 路由 实现类似tab切换效果(vue 2.0)
2019/05/08 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
2019/05/30 Javascript
JS回调函数 callback的理解与使用案例分析
2019/09/09 Javascript
[04:44]DOTA2英雄梦之声_第12期_矮人直升机
2014/06/21 DOTA
[01:32]DOTA2上海特锦赛现场采访:最想COS的英雄
2016/03/25 DOTA
浅谈python内置变量-reversed(seq)
2017/06/21 Python
django框架F&Q 聚合与分组操作示例
2019/12/12 Python
完美解决Django2.0中models下的ForeignKey()问题
2020/05/19 Python
Python爬取你好李焕英豆瓣短评生成词云的示例代码
2021/02/24 Python
Net-A-Porter美国官网:全球时尚奢侈品名站
2017/02/11 全球购物
绵山导游词
2015/02/05 职场文书
办公室行政主管岗位职责
2015/04/09 职场文书
亮剑观后感
2015/06/05 职场文书
闪闪的红星观后感
2015/06/08 职场文书
简单总结SpringMVC拦截器的使用方法
2021/06/28 Java/Android
Nginx实现负载均衡的项目实践
2022/03/18 Servers