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 相关文章推荐
js调用iframe实现打印页面内容的方法
Mar 04 Javascript
jQuery的基本概念与高级编程
May 14 Javascript
JavaScript模块化开发之SeaJS
Dec 13 Javascript
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
Dec 25 Javascript
vue-cli常用设置总结
Feb 24 Javascript
jQuery实现为table表格动态添加或删除tr功能示例
Feb 19 jQuery
微信小程序和百度的语音识别接口详解
May 06 Javascript
VUE项目中加载已保存的笔记实例方法
Sep 14 Javascript
vue学习笔记之slot插槽基本用法实例分析
Feb 01 Javascript
Vue父子之间值传递的实例教程
Jul 02 Javascript
vue 使用饿了么UI仿写teambition的筛选功能
Mar 01 Vue.js
vue实现简易音乐播放器
Aug 14 Vue.js
将光标定位于输入框最右侧实现代码
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
php对数组排序代码分享
2014/02/24 PHP
PHP实现SMTP邮件的发送实例
2018/09/27 PHP
javascript的事件描述
2006/09/08 Javascript
jquery拖动插件(jquery.drag)使用介绍
2013/06/18 Javascript
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
2014/10/29 Javascript
jquery $(document).ready()和window.onload的区别浅析
2015/02/04 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
2015/07/13 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
详解AngularJs中$sce与$sceDelegate上下文转义服务
2016/09/21 Javascript
URL的参数中有加号传值变为空格的问题(URL特殊字符)
2016/11/04 Javascript
js addDqmForPP给标签内属性值加上双引号的函数
2016/12/24 Javascript
javascript中apply/call和bind的使用
2017/02/15 Javascript
element-ui 中的table的列隐藏问题解决
2018/08/24 Javascript
JS canvas绘制五子棋的棋盘
2020/05/28 Javascript
vue项目中axios请求网络接口封装的示例代码
2018/12/18 Javascript
用Cordova打包Vue项目的方法步骤
2019/02/02 Javascript
layui 实现table翻页滚动条位置保持不变的例子
2019/09/05 Javascript
[38:51]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-CDEC
2014/05/22 DOTA
python运行其他程序的实现方法
2017/07/14 Python
python3使用QQ邮箱发送邮件
2020/05/20 Python
Python 3.8中实现functools.cached_property功能
2019/05/29 Python
python处理大日志文件
2019/07/23 Python
Python中print函数简单使用总结
2019/08/05 Python
python使用opencv在Windows下调用摄像头实现解析
2019/11/26 Python
Python自动采集微信联系人的实现示例
2020/02/28 Python
PyQt5+Pycharm安装和配置图文教程详解
2020/03/24 Python
Stuart Weitzman美国官网:美国奢华鞋履品牌
2016/08/18 全球购物
Pretty You London官网:英国拖鞋和睡衣品牌
2019/05/08 全球购物
美国伴娘礼服商店:Evening Collective
2019/10/07 全球购物
linux面试题参考答案(11)
2012/05/01 面试题
物流管理专业大学生自荐信
2013/10/04 职场文书
自主招生教师推荐信
2014/05/10 职场文书
捐书倡议书
2014/08/29 职场文书
2014年最新版离婚协议书范本
2014/11/25 职场文书
学会掌握自己命运的十条黄金法则:
2019/08/08 职场文书