解读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 相关文章推荐
js中if语句的几种优化代码写法
Mar 12 Javascript
JS控制输入框内字符串长度
May 21 Javascript
JavaScript使用FileSystemObject对象写入文本文件内容的方法
Aug 05 Javascript
[原创]Javascript 实现广告后加载 可加载百度谷歌联盟广告
May 11 Javascript
javascript-解决mongoose数据查询的异步操作
Dec 22 Javascript
基于jQuery实现咖啡订单管理简单应用
Feb 10 Javascript
JS原生带小白点轮播图实例讲解
Jul 22 Javascript
js 两个日期比较相差多少天的实例
Oct 19 Javascript
防止Layui form表单重复提交的实现方法
Sep 10 Javascript
VScode格式化ESlint方法(最全最好用方法)
Sep 10 Javascript
vue表单数据交互提交演示教程
Nov 13 Javascript
vue3中轻松实现switch功能组件的全过程
Jan 07 Vue.js
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
基于Snoopy的PHP近似完美获取网站编码的代码
2011/10/23 PHP
php实现简单的上传进度条
2015/11/17 PHP
使用dynatrace-ajax跟踪JavaScript的性能
2010/04/12 Javascript
jquery中this的使用说明
2010/09/06 Javascript
JavaScript实现页面滚动图片加载(仿lazyload效果)
2011/07/22 Javascript
鼠标滚轮控制网页横向移动实现思路
2013/03/22 Javascript
Javascript Ajax异步读取RSS文档具体实现
2013/12/12 Javascript
js在数组中删除重复的元素自保留一个(两种实现思路)
2014/08/22 Javascript
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
node.js中的path.basename方法使用说明
2014/12/09 Javascript
Nodejs中 npm常用命令详解
2016/07/04 NodeJs
Easyui Tree获取当前选择节点的所有顶级父节点
2017/02/14 Javascript
javaScript+turn.js实现图书翻页效果实例代码
2017/02/16 Javascript
微信小程序 设置启动页面的两种方法
2017/03/09 Javascript
JavaScript截屏功能的实现代码
2017/07/28 Javascript
Nodejs技巧之Exceljs表格操作用法示例
2019/11/06 NodeJs
jQuery实现简单评论区功能
2020/10/26 jQuery
[01:20:06]TNC vs VG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python线程中对join方法的运用的教程
2015/04/09 Python
探究python中open函数的使用
2016/03/01 Python
利用Python破解验证码实例详解
2016/12/08 Python
Python tkinter的grid布局及Text动态显示方法
2018/10/11 Python
详解PyCharm+QTDesigner+PyUIC使用教程
2019/06/13 Python
python视频按帧截取图片工具
2019/07/23 Python
pywinauto自动化操作记事本
2019/08/26 Python
如何基于Python制作有道翻译小工具
2019/12/16 Python
西班牙著名的珠宝首饰品牌:P D PAOLA
2018/09/15 全球购物
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物
自荐书封面下载
2013/11/29 职场文书
平面网站制作专科生的自我评价分享
2013/12/11 职场文书
小学新教师培训方案
2014/02/03 职场文书
2014幼儿园大班工作总结
2014/11/10 职场文书
4S店销售内勤岗位职责
2015/04/13 职场文书
感恩老师主题班会
2015/08/12 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书
Windows Server 2019 域控制器安装图文教程
2022/04/28 Servers