解读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脚本语言在网页中的简单应用
May 13 Javascript
jquery fancybox ie6不显示关闭按钮的解决办法
Dec 25 Javascript
jQuery学习笔记之总体架构
Jun 03 Javascript
JavaScript中switch语句的用法详解
Jun 03 Javascript
javascript中return,return true,return false三者的用法及区别
Nov 17 Javascript
BootStrap智能表单实战系列(四)表单布局介绍
Jun 13 Javascript
react native仿微信PopupWindow效果的实例代码
Aug 07 Javascript
微信小程序实现商品属性联动选择
Feb 15 Javascript
了解JavaScript中let语句
May 30 Javascript
Vue form表单动态添加组件实战案例
Sep 02 Javascript
解决vue2中使用elementUi打包报错的问题
Sep 22 Javascript
vue iview 隐藏Table组件里的某一列操作
Nov 13 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
BBS(php & mysql)完整版(一)
2006/10/09 PHP
基于php split()函数的用法详解
2013/06/05 PHP
深入PHP获取随机数字和字母的方法详解
2013/06/06 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
2016/02/03 PHP
语义化 H1 标签
2008/01/14 Javascript
jQuery get和post 方法传值注意事项
2009/11/03 Javascript
javascript 闭包
2011/09/15 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
javascript面向对象之共享成员属性与方法及prototype关键字用法
2015/01/13 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
2015/08/12 Javascript
JS+CSS实现的经典圆角下拉菜单效果代码
2015/10/21 Javascript
jquery实现的点击翻书效果代码
2015/11/04 Javascript
javascript实现html页面之间参数传递的四种方法实例分析
2015/12/15 Javascript
JS实现图片平面旋转的方法
2016/03/01 Javascript
基于Vuejs的搜索匹配功能实现方法
2018/03/03 Javascript
微信小程序实现团购或秒杀批量倒计时
2020/11/01 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
2018/07/25 Javascript
基于Angular中ng-controller父子级嵌套的相关属性详解
2018/10/08 Javascript
小程序实现人脸识别功能(百度ai)
2018/12/23 Javascript
如何获取vue单文件自身源码路径
2019/05/06 Javascript
Vue 3.x+axios跨域方案的踩坑指南
2019/07/04 Javascript
简单介绍Python2.x版本中的cmp()方法的使用
2015/05/20 Python
Python中动态创建类实例的方法
2017/03/24 Python
django开发教程之利用缓存文件进行页面缓存的方法
2017/11/10 Python
python pyheatmap包绘制热力图
2018/11/09 Python
Python解决两个整数相除只得到整数部分的实例
2018/11/10 Python
Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)
2019/05/13 Python
Python collections中的双向队列deque简单介绍详解
2019/11/04 Python
CSS3制作日历实现代码
2012/01/21 HTML / CSS
html5拍照功能实现代码(htm5上传文件)
2013/12/11 HTML / CSS
伦敦一家西班牙童装精品店:La Coqueta
2018/02/02 全球购物
电气工程及其自动化学生实习自我鉴定
2013/09/19 职场文书
教育教学工作反思
2016/02/24 职场文书
pycharm部署django项目到云服务器的详细流程
2021/06/29 Python
MySQL系列之十一 日志记录
2021/07/02 MySQL
JavaScript与JQuery框架基础入门教程
2021/07/15 Javascript