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 相关文章推荐
使Ext的Template可以解析二层的json数据的方法
Dec 22 Javascript
google地图的路线实现代码
Aug 20 Javascript
JQuery上传插件Uploadify使用详解及错误处理
Apr 27 Javascript
JS 事件绑定函数代码
Apr 28 Javascript
JS对象转换为Jquery对象示例
Jan 26 Javascript
javascript实例分享---具有立体效果的图片特效
Jun 08 Javascript
网页禁用右键菜单和鼠标拖动选择方法小结
Feb 25 Javascript
详解.vue文件中style标签的几个标识符
Jul 17 Javascript
如何从0开始用node写一个自己的命令行程序
Dec 29 Javascript
小程序页面动态配置实现方法
Feb 05 Javascript
vue实现分页栏效果
Jun 28 Javascript
vue动态绘制四分之三圆环图效果
Sep 03 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
长波有什么东西
2021/03/01 无线电
php版本的cron定时任务执行器使用实例
2014/08/19 PHP
ThinkPHP 表单自动验证运用示例
2014/10/13 PHP
php中magic_quotes_gpc对unserialize的影响分析
2014/12/16 PHP
以文件形式缓存php变量的方法
2015/06/26 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
网页常用特效代码整理
2006/06/23 Javascript
判断输入是否为空,获得输入类型的JS代码
2013/10/30 Javascript
jQuery截取指定长度字符串的实现原理及代码
2014/07/01 Javascript
jQuery插件开发汇总
2016/05/15 Javascript
jQuery ajax应用总结
2016/06/02 Javascript
ajax级联菜单实现方法实例分析
2016/11/28 Javascript
BootStrap Table 获取同行不同列元素的方法
2016/12/19 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
2017/03/02 Javascript
简单实现js放大镜效果
2017/07/24 Javascript
javascript中的replace函数(带注释demo)
2018/01/07 Javascript
Node.JS在命令行中检查Chrome浏览器是否安装并打开指定网址
2019/05/21 Javascript
[02:44]重置世界,颠覆未来——DOTA2 7.23版本震撼上线
2019/12/01 DOTA
[03:07]完美世界DOTA2联赛PWL DAY10 决赛集锦
2020/11/11 DOTA
Python利用flask sqlalchemy实现分页效果
2020/08/02 Python
python OpenCV学习笔记实现二维直方图
2018/02/08 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
深入解析神经网络从原理到实现
2019/07/26 Python
使用 Python 在京东上抢口罩的思路详解
2020/02/27 Python
让IE6、IE7、IE8支持CSS3的脚本
2010/07/20 HTML / CSS
Canvas多边形绘制的实现方法
2019/08/05 HTML / CSS
世界著名的顶级牛排:Omaha Steak(奥马哈牛排)
2016/09/20 全球购物
Clearly新西兰:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
作文评语大全
2014/04/23 职场文书
建筑节能汇报材料
2014/08/22 职场文书
考试没考好检讨书
2015/05/06 职场文书
学生检讨书怎么写
2015/05/07 职场文书
酒会开场白大全
2015/06/01 职场文书
怒海潜将观后感
2015/06/11 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书
2015教师节通讯稿
2015/07/20 职场文书