解读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实现 百度翻译 可折叠的分享按钮列表
Mar 12 Javascript
jQuery检查事件是否触发的方法
Jun 26 Javascript
JavaScript Length 属性的总结
Nov 02 Javascript
js判断登陆用户名及密码是否为空的简单实例
May 16 Javascript
Angular页面间切换及传值的4种方法
Nov 04 Javascript
Bootstrap实现渐变顶部固定自适应导航栏
Aug 27 Javascript
Node.js查找当前目录下文件夹实例代码
Mar 07 Javascript
JavaScript中的遍历详解(多种遍历)
Apr 07 Javascript
简单实现js点击展开二级菜单功能
May 16 Javascript
Vue项目中引入外部文件的方法(css、js、less)
Jul 24 Javascript
vue实现随机验证码功能的实例代码
Apr 30 Javascript
vue+高德地图写地图选址组件的方法
May 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
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
js实现同一页面多个不同运动效果的方法
2015/04/10 Javascript
Node.js和MongoDB实现简单日志分析系统
2015/04/25 Javascript
jQuery+PHP星级评分实现方法
2015/10/02 Javascript
快速学习jQuery插件 Form表单插件使用方法
2015/12/01 Javascript
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
EasyUi combotree 实现动态加载树节点
2016/04/01 Javascript
js获取form表单所有数据的简单方法
2016/08/18 Javascript
JavaScript设计模式之单体模式全面解析
2016/09/09 Javascript
JS如何判断浏览器类型和详细区分IE各版本浏览器
2017/03/04 Javascript
JS实现二叉查找树的建立以及一些遍历方法实现
2017/04/17 Javascript
详解AngularJS1.6版本中ui-router路由中/#!/的解决方法
2017/05/22 Javascript
js for终止循环 跳出多层循环
2018/10/04 Javascript
小程序页面动态配置实现方法
2019/02/05 Javascript
vue实现移动端input上传视频、音频
2020/08/18 Javascript
[00:53]TI3正赛第三天 DK怒破A队不败金身 现场国旗飘扬热血激昂
2013/08/10 DOTA
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
python判断、获取一张图片主色调的2个实例
2014/04/10 Python
微信 用脚本查看是否被微信好友删除
2016/10/28 Python
解决Pycharm出现的部分快捷键无效问题
2018/10/22 Python
python射线法判断检测点是否位于区域外接矩形内
2019/06/28 Python
python求质数列表的例子
2019/11/24 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
如何用 Python 处理不平衡数据集
2021/01/04 Python
英国鹦鹉店:Parrot Essentials
2018/12/03 全球购物
世界上最伟大的马产品:Equiderma
2020/01/07 全球购物
年终自我鉴定
2013/10/09 职场文书
服装设计行业个人的自我评价
2013/12/20 职场文书
成功的酒店创业计划书
2013/12/27 职场文书
旅游专业职业生涯规划范文
2014/01/13 职场文书
小学开学典礼主持词
2014/03/19 职场文书
2014年教师节讲话稿5篇
2014/09/10 职场文书
计算机实训报告总结
2014/11/05 职场文书
读《皮囊》有感:理解是对他人的最大的善举
2019/11/14 职场文书
golang中的空slice案例
2021/04/27 Golang
openstack中的rpc远程调用的方法
2021/07/09 Python