解读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 相关文章推荐
用cookies实现的可记忆的样式切换效果代码下载
Dec 24 Javascript
从js向Action传中文参数出现乱码问题的解决方法
Dec 29 Javascript
Javascript中的delete操作符详细介绍
Jun 06 Javascript
百度地图api如何使用
Aug 03 Javascript
原生Javascript和jQuery做轮播图简单例子
Oct 11 Javascript
bootstrap日历插件datetimepicker使用方法
Dec 14 Javascript
微信禁止下拉查看URL的处理方法
Sep 28 Javascript
Angular整合zTree的示例代码
Jan 24 Javascript
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
Jan 18 jQuery
微信小程序五子棋游戏的悔棋实现方法【附demo源码下载】
Feb 20 Javascript
利用原生JS实现data方法示例代码
May 28 Javascript
react 不用插件实现数字滚动的效果示例
Apr 14 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.01发布
2006/10/09 PHP
PHP 和 MySQL 开发的 8 个技巧
2007/01/02 PHP
php session和cookie使用说明
2010/04/07 PHP
php ajax异步读取rss文档数据
2016/03/29 PHP
PHP编写登录验证码功能 附调用方法
2016/05/19 PHP
PHP strripos函数用法总结
2019/02/11 PHP
新浪的图片新闻效果
2007/01/13 Javascript
javaScript对象和属性的创建方法
2007/01/15 Javascript
Javascript 继承机制实例
2009/08/12 Javascript
js的toUpperCase方法用法实例
2015/01/27 Javascript
比例尺、缩略图、平移缩放之百度地图添加控件方法
2015/08/03 Javascript
多种jQuery绑定事件的实现方式
2016/06/13 Javascript
微信小程序 教程之wxapp视图容器 swiper
2016/10/19 Javascript
javascript使用递归算法求两个数字组合功能示例
2017/01/03 Javascript
js获取浏览器的各种属性
2017/04/27 Javascript
简单实现js进度条加载效果
2020/03/25 Javascript
vue-swiper的使用教程
2018/08/30 Javascript
详解Vue-Router源码分析路由实现原理
2019/05/15 Javascript
为什么Vue3.0使用Proxy实现数据监听(defineProperty表示不背这个锅)
2019/10/14 Javascript
JavaScript使用prototype属性实现继承操作示例
2020/05/22 Javascript
两个使用Python脚本操作文件的小示例分享
2015/08/27 Python
python编程通过蒙特卡洛法计算定积分详解
2017/12/13 Python
Python3内置模块random随机方法小结
2019/07/13 Python
Python测试模块doctest使用解析
2019/08/10 Python
Django多层嵌套ManyToMany字段ORM操作详解
2020/05/19 Python
python实现mean-shift聚类算法
2020/06/10 Python
django创建css文件夹的具体方法
2020/07/31 Python
解决Python3.8运行tornado项目报NotImplementedError错误
2020/09/02 Python
python pyg2plot的原理知识点总结
2021/02/28 Python
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
英国自行车商店:AW Cycles
2021/02/24 全球购物
教师自荐信
2013/12/10 职场文书
高三历史教学反思
2014/01/09 职场文书
个性发展自我评价2015
2015/03/09 职场文书
特种设备安全管理制度
2015/08/06 职场文书
小学语文新课改心得体会
2016/01/22 职场文书