【发布时间】:2020-09-12 13:00:48
【问题描述】:
如果我在 Chrome 控制台中输入
{} + {}我得到"[object Object][object Object]"
但如果我添加分号,结果会有所不同:
{} + {};我得到NaN
虽然我不明白其中的区别。第一个是有道理的,对我来说,addition operator rules 如下:
- 如果至少一个操作数是对象,则将其转换为原始值(字符串、数字或布尔值);
- 转换后,若至少有一个操作数为字符串类型,则将第二个操作数转换为字符串并执行拼接;
- 在其他情况下,两个操作数都被转换为数字并执行算术加法。
由于两个操作数都是对象,所以它们都被转换为字符串。 但是在第二种情况下发生了什么?
如果我分配了一个值(a = ...) 在这两种情况下,我的变量都是一个字符串。我试图寻找在给出表达式时 Chrome 控制台返回的规范,但没有找到。
奇怪的是,添加评论也会返回NaN:
{} + {} //comment => NaN
我知道 Javascript 有时会很奇怪,但几乎总有一个合乎逻辑的解释。这里似乎取决于 Chrome 是如何解释它的。
另一方面,Firefox 在这两种情况下都返回NaN,我也不明白。
【问题讨论】:
-
"...几乎总是有一个合乎逻辑的解释"取决于您如何定义“逻辑”。总是有一个一致的解释,即使这种一致性被本地化为特定的实现。
-
您可以通过忽略与
+运算符有关的任何事情来简化您的注意力。您可以通过{}和{};之间的区别重现一个更简单的情况,其中{};产生undefined。因此,您的+案例很可能被视为{} + undefined,因此NaN。不是一个完整的解释,但至少你知道你可以排除+的原因。
标签: javascript console google-chrome-devtools google-chrome-console