解读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
Sep 24 Javascript
Prototype Function对象 学习
Jul 12 Javascript
js 函数的执行环境和作用域链的深入解析
Nov 01 Javascript
jQuery使用动态渲染表单功能完成ajax文件下载
Jan 15 Javascript
简单方法判断JavaScript对象为null或者属性为空
Sep 26 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
Nov 16 Javascript
微信小程序 欢迎界面开发的实例详解
Nov 30 Javascript
JavaScript的for循环中嵌套一个点击事件的问题解决
Mar 03 Javascript
vue实现表格增删改查效果的实例代码
Jul 18 Javascript
webpack配置之后端渲染详解
Oct 26 Javascript
vue.js 打包时出现空白页和路径错误问题及解决方法
Jun 26 Javascript
js中console在一行内打印字符串和对象的方法
Sep 10 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
来自phpguru得Php Cache类源码
2010/04/15 PHP
PHP运行时强制显示出错信息的代码
2011/04/20 PHP
php自动获取字符串编码函数mb_detect_encoding
2011/05/31 PHP
linux下为php添加iconv模块的方法
2016/02/28 PHP
CI框架常用方法小结
2016/05/17 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
2019/02/25 PHP
javascript 获取元素位置的快速方法 getBoundingClientRect()
2009/11/26 Javascript
javaScript NameSpace 简单说明介绍
2013/07/18 Javascript
ExtJs动态生成treepanel的Json格式
2015/07/19 Javascript
jquery实现弹出层登录和全屏层注册特效
2015/08/28 Javascript
利用JS实现页面删除并重新排序功能
2016/12/09 Javascript
js实现复选框的全选和取消全选效果
2017/01/03 Javascript
微信小程序 下拉菜单简单实例
2017/04/13 Javascript
layui框架中layer父子页面交互的方法分析
2017/11/15 Javascript
解决select2在bootstrap modal中不能正常使用的问题
2018/08/09 Javascript
Vue将页面导出为图片或者PDF
2020/08/17 Javascript
vue实现随机验证码功能(完整代码)
2019/12/10 Javascript
详解vue 组件的实现原理
2020/11/12 Javascript
Python-基础-入门 简介
2014/08/09 Python
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
2016/07/12 Python
Python生成器以及应用实例解析
2018/02/08 Python
在python plt图表中文字大小调节的方法
2019/07/08 Python
给我一面国旗 python帮你实现
2019/09/30 Python
pandas的resample重采样的使用
2020/04/24 Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
2020/05/20 Python
使用Keras训练好的.h5模型来测试一个实例
2020/07/06 Python
一款基于css3麻将筛子3D翻转特效的实例教程
2014/12/31 HTML / CSS
JD Sports德国官网:英国领先的运动鞋和运动服饰零售商
2018/02/26 全球购物
德国富尔达运动鞋店:43einhalb
2020/12/25 全球购物
优乐美广告词
2014/03/14 职场文书
汽车销售经理岗位职责
2014/06/09 职场文书
2014年村委会工作总结
2014/11/24 职场文书
2015年纪检监察工作总结
2015/04/08 职场文书
检讨书格式
2015/05/07 职场文书
2015年生活老师工作总结
2015/05/27 职场文书
彻底卸载VMware虚拟机的超详细步骤记录
2022/07/15 Servers