以下运算
{}+{}
结果是什么?稍等..
先了解下+运算符。JavaScript中运算符 “+” 很简单,有两种意思
1,字符串连接
2,数字相加
运算时其它值都将转换成这两个类型。
JavaScript中有基本类型(undefined, null, booleans, numbers, strings)、对象类型(objects, arrays)和函数类型(functions)。
类型转换时先将对象/函数类型转换成基本类型。然后在根据运算符“+”转成字符串或数字。
其它基本类型转成数字
有如下规则
Number(undefined) // NaN
Number(null) // 0
Number(true) // 1
Number(false) // 0
Number('1') // 1
其它基本类型转成字符串
有如下规则
String(undefined) // "undefined"
String(null) // "null"
String(true) // "true"
String(false) // "false"
String(1) // "1"
回到上面的题目 : {}+{}
1,先将两个对象直接量转成基本类型,{}的valueOf()还是自己。如下
var obj = {};
obj.valueOf() === obj; // true
2,转成字符串,{}的toString()是“[object Object]”
最后两个字符串连接的结果是“[object Object][object Object]”。
结果真是这个吗?在浏览器的控制台中测试不是,是NaN。
真让人匪夷所思,前面一路推理下来最后竟然不对。
其实原因是第一个{}并非表示对象直接量,而是语句块的意思。参考:Javascript中大括号“{}”的多义性
即第一个大括号是语句块,该语句块中没有任何执行语句,可以忽略。演变是这样的
1 {}+{}
2 +{}
3 +"[object Object]"
4 NaN
恍然大悟了,加个小括号强制将第一个大括号转成对象直接量
。结果就是期望的了。如
({}+{})
这时将输出
补充:node环境中 {}+{} 输出的是“[object Object][object Object]” 却不是 NaN
相关:JavaScript中“+”的陷阱(续)
- 大小: 5.4 KB
- 大小: 2 KB
分享到:
相关推荐
Javascript中的陷阱大集合【译】 总结了Javascript的各种陷阱,很棒
本文将详细介绍JavaScript中“+”的一些错误应用,需要的朋友可以参考下
JavaScript中常见陷阱,都是一些实际应用中,需要注意的地方,需要的朋友可以参考下。
JavaScript陷阱太多,因此我们得步步为营,下面这些点,相信很多同学都会遇到,希望朋友们多注意下。JavaScript陷阱太多,因此我们得步步为营,下面是一些常见的影响性能的陷阱。
来自 Nine Javascript Gotchas , 以下是JavaScript容易犯错的九个陷阱。虽然不是什么很高深的技术问题,但注意一下,会使您的编程轻松些,即所谓make life easier. 笔者对某些陷阱会混杂一些评点。
javascript 陷阱 javascript 陷阱
《精通JavaScript》讲述了现代JavaScript的所有...《精通JavaScript》关注于基础且重要的主题——现代JavaScript是什么和不是什么,浏览器支持的当前状态,以及需要注意的陷阱等。书中所有概念都来自于现实案例的分析。
在JavaScript中遭遇级联表达式陷阱
《精通JavaScript》言简意赅,扩展了读者视野,并关注于基础且重要的主题——现代JavaScript是什么和不是什么,浏览器支持的当前状态,以及需要注意的陷阱等。书中所有概念都来自于现实案例的分析。
JavaScript进阶必读。学习更高阶的使用JavaScript,避免语言的陷阱,灵活运用最佳实践。 适合中级及以上工程师参考。
主要给大家总结介绍了关于JavaScript中八个常见的陷阱,这些陷阱虽然针对Javascript初学者,但是砖家们你们也可以看一看,避免入了这些坑,感兴趣的朋友们下面来一起看看吧。
第2章 浏览器中的JavaScript 2.1 嵌入网页的可执行内容 2.2 赏心悦目的特效 2.3 使用JavaScript来与用户交互 2.4 绕开脚本陷阱 2.5 总结 第3章 开发环境和调试方法 3.1 我能用什么来编写脚本--...
主要介绍了JavaScript中的this陷阱的最全收集,需要的朋友可以参考下
JavaScript默认采用原型继承。虽然没有类(class)的概念,它的函数(function)...当原型上存储对象时,就可能有一些陷阱。 先看第一个例子 代码如下:var create = function() { function Fn() {} return function(paren
帮助避免错误的Javascript陷阱清单(Javascript Gotchas listed to help avoid mistakes)
来自Nine Javascript Gotchas, 以下是JavaScript容易犯错的九个陷阱。虽然不是什么很高深的技术问题,但注意一下,会使您的编程轻松些,即所谓make life easier. 笔者对某些陷阱会混杂一些评点。 1、最后一个...
本书言简意赅,扩展了读者视野,并关注于基础且重要的主题--现代JavaScript是什么和不是什么,浏览器支持的当前状态,以及需要注意的陷阱等。书中所有概念都来自于现实案例的分析。 John Resig,世界级Javascript...