解读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来定义类的规范小结
Nov 19 Javascript
Mac/Windows下如何安装Node.js
Nov 22 Javascript
浅析Node.js实现HTTP文件下载
Aug 05 Javascript
JavaScript对JSON数据进行排序和搜索
Jul 24 Javascript
详解Nuxt.js Vue服务端渲染摸索
Feb 08 Javascript
vue2.0使用v-for循环制作多级嵌套菜单栏
Jun 25 Javascript
利用node 判断打开的是文件 还是 文件夹的实例
Jun 10 Javascript
Webpack中loader打包各种文件的方法实例
Sep 03 Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
Sep 11 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
Sep 18 Javascript
解决layui动态添加的元素click等事件触发不了的问题
Sep 20 Javascript
通过实例了解Javascript柯里化流程
Mar 03 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上传图片、删除图片实现代码
2010/05/12 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(一)
2014/06/23 PHP
PHP curl CURLOPT_RETURNTRANSFER参数的作用使用实例
2015/02/07 PHP
详解PHP swoole process的使用方法
2017/08/26 PHP
分享20款好玩的jQuery游戏
2011/04/17 Javascript
HTML中的setCapture和releaseCapture使用介绍
2012/03/21 Javascript
Javascript验证用户输入URL地址是否为空及格式是否正确
2014/10/09 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
2015/01/21 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
学习JavaScript事件流和事件处理程序
2016/01/25 Javascript
JS定义类的六种方式详解
2016/05/12 Javascript
极力推荐一款小巧玲珑的可视化编辑器bootstrap-wysiwyg
2016/05/27 Javascript
Javascript类型系统之String字符串类型详解
2016/06/21 Javascript
js实现滑动到页面底部自动加载更多功能
2017/02/15 Javascript
使用 NodeJS+Express 开发服务端的简单介绍
2017/04/07 NodeJs
在vue中通过axios异步使用echarts的方法
2018/01/13 Javascript
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
使用apifm-wxapi快速开发小程序过程详解
2019/08/05 Javascript
jquery添加div实现消息聊天框
2020/02/08 jQuery
简介JavaScript错误处理机制
2020/08/04 Javascript
如何利用JavaScript编写更好的条件语句详解
2020/08/10 Javascript
跟老齐学Python之开始真正编程
2014/09/12 Python
Python selenium 三种等待方式详解(必会)
2016/09/15 Python
详解 Python中LEGB和闭包及装饰器
2017/08/03 Python
http请求 request失败自动重新尝试代码示例
2018/01/25 Python
NumPy 如何生成多维数组的方法
2018/02/05 Python
德国游戏机商店:Konsolenkost
2019/12/08 全球购物
电子商务网站的创业计划书
2014/01/05 职场文书
火车的故事教学反思
2014/02/11 职场文书
工作作风懒散检讨书
2014/10/29 职场文书
年度考核个人总结
2015/03/06 职场文书
论文致谢词范文
2015/05/14 职场文书
冰雪公主观后感
2015/06/16 职场文书
2015大学迎新标语
2015/07/16 职场文书
mybatis使用oracle进行添加数据的方法
2021/04/27 Oracle
MySql存储过程之逻辑判断和条件控制
2021/05/26 MySQL