JS对象与数字相加

JS object and number addition

{} + 5 === 5
5 + {} === '5[object Object]'

第一个表达式{} + 5 === 5是如何计算的?

第二个表达式5 + {} === '5[object Object]'是预期结果。

=====编辑====

({}) + 5 === '[object Object]5'

这可能是说:第一个表达式中的 {} 如问题评论所述被忽略。

在下面的代码片段中,两个表达式都被转换为字符串,因此您会得到以下结果,这是预期的:

[object Object]5
5[object Object]

发生这种情况的原因是因为 + 不能在数字之间相加,因为 {} 不能转换为数字。相反 + 在这里被认为是字符串连接,并且两个操作数都被转换为字符串。

console.log({} + 5 === '[object Object]5')
console.log(5 + {} === '5[object Object]')

行首的{}被认为是代码块而不是对象字面量。因此 {} + 5 不被视为两个值之间的二进制加法,计算结果为 +5,一元 + 运算符应用于 5.

{} 放在圆括号内时,它变成对象文字,整个表达式的计算结果为 '[object Object]5'

可以找到有关此陷阱的更多详细信息here