如果我在 Chrome 控制台中输入
{} + {}
我明白了"[object Object][object Object]"
但是如果我添加分号,结果会有所不同:
{} + {};
我明白了NaN
我不明白其中的区别。第一个是有道理的,对我来说,加法运算符规则如下:
- 如果至少一个操作数是对象,则将其转换为原始值(字符串、数字或布尔值);
- 转换后,若至少有一个操作数为字符串类型,则将第二个操作数转换为字符串并执行拼接;
- 在其他情况下,两个操作数都转换为数字并执行算术加法。
由于两个操作数都是对象,因此它们都被转换为字符串。但是在第二种情况下发生了什么?
如果我分配一个值(a = ...)
在这两种情况下,我的变量都将是一个字符串。我试图寻找在给出表达式时 Chrome 控制台返回的规范,但没有找到。奇怪的是,添加评论也会返回NaN
:
{} + {} //comment
=>NaN
我知道 Javascript 有时可能很奇怪,但几乎总是有一个合乎逻辑的解释。这里似乎取决于 Chrome 是如何解释它的。另一方面,FirefoxNaN
两种情况都返回,我也不明白。