为什么在 JavaScript 中 {} + [] 返回0? [重复]

如果您在 JavaScript 中键入以下代码:

-- - --

您可能会惊奇地发现它输出了一个数字0,而不是预期的空对象。这似乎很奇怪,因为我们期望两个空值相加应该返回 NaN。

解释

JavaScript解释器中的原因是在这个表达式中,{}被视为一个空块声明,并且在解释器中被丢弃。所以表达式变成了 +[],这等同于 +"",即将一个空字符串转换成数字,结果是0。

因此,{} + [] 等效于 +[],并返回0。

这种行为可能看起来很奇怪,在实际编码过程中很少有人会使用这种方式进行求和运算。但是,理解解释器如何处理代码可以帮助开发人员更好地理解JavaScript中的语言特性。

更多深入讨论

为什么会出现这种情况?答案是由于 JavaScript 的操作符优先级和类型转换规则。在这个例子中,{} 被解释为一个独立的块,并被忽略掉了。那么问题就在于只剩下 +[] 了。这里,一些类型转换规则适用:当使用+运算符与一个数组时,JavaScript会尝试将它转换为一个数字。因此,一个空数组会被转换成0.

如果您想要的是一个空对象的话,可以在{}后面添加任意字符或使用另一种方法创建它:

---- - -- -- -------- --------
------------------- - -- -- ----------- -----

这些代码片段将返回预期的结果,并在需要时创建一个空对象。

总结

虽然这种现象看起来很奇怪,但它提醒我们要注意 JavaScript 中操作符的优先级和类型转换规则。同时,在实际编程中,我们应该避免使用这种方式来进行求和运算。

希望这篇文章能够帮助您更好地理解 JavaScript 中的语言特性!

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/29936