JS对象和数字加法

时间:2019-02-23 09:27:43

标签: javascript implicit-conversion

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

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

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

=====编辑====

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

也许是这样说:正如问题注释所指出的,第一个表达式中的{}被忽略了。

2 个答案:

答案 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]')