JavaScript中“+”的陷阱深刻理解


Posted in Javascript onDecember 04, 2012

一、两个中括号相加
[] + []
中括号没有语句块的作用,因此这里的两个中括号就是一个数组。两个数组(对象类型)相加先要将其转换成值类型(基本类型)。
1,转成值类型调用valueOf,[]的valueOf()还是自己

var arr = []; 
arr.valueOf() === arr; // true

2,转成字符串,[]的toString是空字符串
[].toString(); // "" 
String([]) // ""

结果出来了。两个空字符串相加,结果仍然是空字符串。即这里的“+”指字符串连接而非数字相加。

二、大括号和中括号的相加

{} + []

注意这里的大括号仍然不是对象直接量,而是空语句块。因此可以去掉它,即相当于
+ []

注意,这时由之前看似的两个运算数变成了实际的单运算数。而“+”运算符当只有一个运算数时只代表一个意思:算术加运算。即这里没有字符串连接的意思了。
中括号的toString()是空字符串,又相当于
+ ""

“+”代表算术加运算,字符串非数字,因此将其转换成数字类型。空字符串转成数字类型在上一篇提到过,为0。
那么最后的结果就是0。

三、中括号和大括号相加

[] + {}

与上面的对比,只是中括号和小括号交换了顺序。结果却不相同。大括号放到右边后,与上面讨论的大括号的意义不同了。这里的大括号就是一个对象直接量而非语句块。
“+” 两边的运算数转成值类型分别是:"" 和 "[object Object]"。这时 "+" 表示字符串连接。即
"" + "[object Object]"

结果是 “[object Object]”。

四、小括号也和它们相加试试
突发奇想!好吧,小括号虽然有多义性,但它不能作为运算数。

Javascript 相关文章推荐
jquery 定位input元素的几种方法小结
Jul 28 Javascript
鼠标移到导航当前位置的LI变色处于选中状态
Aug 23 Javascript
javascript实现画不相交的圆
Apr 07 Javascript
jQuery实现内容定时切换效果完整实例
Apr 06 Javascript
JS判断输入的字符串是否是数字的方法(正则表达式)
Nov 29 Javascript
Angular路由简单学习
Dec 26 Javascript
Bootstrap模态窗口源码解析
Feb 08 Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
Feb 27 Javascript
详解tween.js 中文使用指南
Jan 05 Javascript
vue自定义指令实现方法详解
Feb 11 Javascript
JS中的算法与数据结构之集合(Set)实例详解
Aug 20 Javascript
如何实现js拖拽效果及原理解析
May 08 Javascript
将光标定位于输入框最右侧实现代码
Dec 04 #Javascript
JavaScript中__proto__与prototype的关系深入理解
Dec 04 #Javascript
js 限制数字 js限制输入实现代码
Dec 04 #Javascript
JSON语法五大要素图文介绍
Dec 04 #Javascript
js关闭子窗体刷新父窗体实现方法
Dec 04 #Javascript
cument.execCommand()用法深入理解
Dec 04 #Javascript
页面只能打开一次Cooike如何实现
Dec 04 #Javascript
You might like
PhpMyAdmin中无法导入sql文件的解决办法
2010/01/08 PHP
php地址引用(php地址引用的效率问题)
2012/03/23 PHP
php限制上传文件类型并保存上传文件的方法
2015/03/13 PHP
PHP的文件操作与算法实现的面试题示例
2015/08/10 PHP
ThinkPHP 5.1 跨域配置方法
2019/10/11 PHP
cloudgamer出品ImageZoom 图片放大效果
2010/04/01 Javascript
javascript中有趣的反柯里化深入分析
2012/12/05 Javascript
Js中获取frames中的元素示例代码
2013/07/30 Javascript
详解jquery uploadify 上传文件
2013/11/09 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
js事件监听器用法实例详解
2015/06/01 Javascript
JavaScript如何动态创建table表格
2020/08/02 Javascript
全面解析vue中的数据双向绑定
2017/05/10 Javascript
JS实现商品筛选功能
2020/08/19 Javascript
AngularJS中下拉框的高级用法示例
2017/10/11 Javascript
vue组件发布到npm简单步骤
2017/11/30 Javascript
详解Vue之计算属性
2020/06/20 Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
2020/10/29 Javascript
python实现的一只从百度开始不断搜索的小爬虫
2013/08/13 Python
Python版的文曲星猜数字游戏代码
2013/09/02 Python
忘记ftp密码使用python ftplib库暴力破解密码的方法示例
2014/01/22 Python
Python实现连接两个无规则列表后删除重复元素并升序排序的方法
2018/02/05 Python
详解Python_shutil模块
2019/03/15 Python
python web框架中实现原生分页
2019/09/08 Python
基于Python和C++实现删除链表的节点
2020/07/06 Python
python Selenium 库的使用技巧
2020/10/16 Python
CSS3选择器新增问题的实现
2021/01/21 HTML / CSS
Needle & Thread官网:英国仙女品牌
2018/01/13 全球购物
联想德国官网:Lenovo Germany
2018/07/04 全球购物
js正则匹配markdown里的图片标签的实现
2021/03/24 Javascript
留学顾问岗位职责
2014/04/14 职场文书
欢迎横幅标语
2014/06/17 职场文书
工程技术负责人岗位职责
2015/04/13 职场文书
格林童话读书笔记
2015/06/30 职场文书
生日宴会祝酒词
2015/08/10 职场文书
go 原生http web 服务跨域restful api的写法介绍
2021/04/27 Golang