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
{} + 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