解读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的gzip静态压缩方法
Jan 05 Javascript
js隐藏与显示回到顶部按钮及window.onscroll事件应用
Jan 25 Javascript
jquery选择符快速提取web表单数据示例
Mar 27 Javascript
html文档中的location对象属性理解及常见的用法
Aug 13 Javascript
js中的事件捕捉模型与冒泡模型实例分析
Jan 10 Javascript
PHP守护进程实例
Mar 06 Javascript
jquery实现简单实用的弹出层效果代码
Oct 15 Javascript
vue指令以及dom操作详解
Mar 04 Javascript
详解vue中router-link标签所必备了解的属性
Apr 15 Javascript
分享一个vue项目“脚手架”项目的实现步骤
May 26 Javascript
Vue实现回到顶部和底部动画效果
Jul 31 Javascript
Vue组件间通信 Vuex的用法解析
Aug 05 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 Session_Regenerate_ID函数双释放内存破坏漏洞
2011/01/27 PHP
PHP不用第三变量交换2个变量的值的解决方法
2013/06/02 PHP
配置php.ini实现PHP文件上传功能
2014/11/27 PHP
php正则替换处理HTML页面的方法
2015/06/17 PHP
在PHP语言中使用JSON和将json还原成数组的方法
2016/07/19 PHP
php函数式编程简单示例
2019/08/08 PHP
关于jquery.validate1.9.0前台验证的使用介绍
2013/04/26 Javascript
JS测试显示屏分辨率以及屏幕尺寸的方法
2013/11/22 Javascript
js字符串截取函数substr substring slice使用对比
2013/11/27 Javascript
cookie中的path与domain属性详解
2013/12/18 Javascript
JS实现同时搜索百度和必应的方法
2015/01/27 Javascript
js跨域请求数据的3种常用的方法
2015/12/01 Javascript
JavaScript判断变量是否为数组的方法(Array)
2016/02/24 Javascript
JS学习之表格的排序简单实例
2016/05/16 Javascript
jQuery实现简单倒计时功能的方法
2016/07/04 Javascript
基于jQuery实现选项卡效果
2017/01/04 Javascript
jstree单选功能的实现方法
2017/06/07 Javascript
JavaScript使用递归和循环实现阶乘的实例代码
2018/08/28 Javascript
layui内置模块layim发送图片添加加载动画的方法
2019/09/23 Javascript
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
2020/06/11 Javascript
JavaScript图片旋转效果实现方法详解
2020/06/28 Javascript
vue基于better-scroll仿京东分类列表
2020/06/30 Javascript
[36:19]2018DOTA2亚洲邀请赛 小组赛 A组加赛 Newbee vs LGD
2018/04/03 DOTA
Django实战之用户认证(用户登录与注销)
2018/07/16 Python
Python中文件的写入读取以及附加文字方法
2019/01/23 Python
Python实现自定义读写分离代码实例
2019/11/16 Python
Django之腾讯云短信的实现
2020/06/12 Python
python 实现两个npy档案合并
2020/07/01 Python
基于python的opencv图像处理实现对斑马线的检测示例
2020/11/29 Python
Ubuntu16安装Python3.9的实现步骤
2020/12/15 Python
美国知名的摄影器材销售网站:Adorama
2017/02/01 全球购物
企业演讲比赛主持词
2014/03/18 职场文书
春节联欢晚会主持词范文
2014/03/24 职场文书
质量安全标语
2014/06/07 职场文书
政风行风评议工作总结
2014/10/21 职场文书
利用js实现简单开关灯代码
2021/11/23 Javascript