{} + 5 === 5
5 + {} === '5[object Object]'
第一个表达式{} + 5 === 5
是如何计算的?
第二个表达式5 + {} === '5[object Object]'
是预期结果。
=====编辑====
({}) + 5 === '[object Object]5'
也许是这样说:正如问题注释所指出的,第一个表达式中的{}
被忽略了。
答案 0 :(得分:2)
在行首的{}
被认为是代码块,而不是对象文字。因此,{} + 5
不被视为两个值之间的二进制加法,其结果为+5
,一元+运算符应用于5。
将{}
放在圆括号内时,它变成对象文字,并且整个表达式的计算结果为'[object Object]5'
有关此陷阱的更多详细信息,请参见here
答案 1 :(得分:1)
在以下代码段中,两个表达式都被转换为字符串,因此您将获得以下预期结果:
[object Object]5
5[object Object]
之所以会这样,是因为+
不能强制转换为数字,因此无法在数字之间加上{}
。相反,+
在这里被认为是字符串连接,并且两个操作数都转换为字符串。
console.log({} + 5 === '[object Object]5')
console.log(5 + {} === '5[object Object]')