带javascript对象的Plus运算符

带javascript对象的Plus运算符,javascript,Javascript,“+{}的计算结果为“[object object]” 0+{}计算结果为“0[对象]” 但是,+{}本身的计算结果为NaN,因此它被转换为一个数字。如何将+{}转换为表达式0+{}中的字符串?在后一种情况下,+是一个试图转换{}的一元运算符在一个数字中但是在第一种情况下发生了一个加法,并且默认情况下从一个对象到字符串的转换是[object object],因此您可以看到相应的结果。区别在于,尽管两个加号看起来相同,但实际上它们是不同的运算符 在前一种情况下,您有一个二进制+,这意味着它有两个操

“+{}
的计算结果为
“[object object]”

0+{}
计算结果为
“0[对象]”


但是,
+{}
本身的计算结果为
NaN
,因此它被转换为一个数字。如何将
+{}
转换为表达式
0+{}
中的字符串?

在后一种情况下,
+
是一个试图转换
{}的一元运算符
在一个
数字中
但是在第一种情况下发生了一个加法,并且默认情况下从一个对象到字符串的转换是
[object object]
,因此您可以看到相应的结果。

区别在于,尽管两个加号看起来相同,但实际上它们是不同的运算符

在前一种情况下,您有一个二进制
+
,这意味着它有两个操作数(两边各一个)。与许多其他语言一样,JS中的二进制
+
具有许多函数,具体取决于操作数的类型。在这里,它进行字符串连接,从而得到结果(两个操作数的字符串表示形式,连接在一起)


在后一种情况下,您有一个一元数
+
,这意味着它只有一个操作数。在JS规范中,一元加号的任务是将其操作数强制转换为数字。因为对于空对象,这是不可能的,所以取而代之的是
NaN

因为一元运算符和二元运算符
+
之间存在差异。而且,与所有这些问题一样,答案是:因为规范中对它的定义是这样的。对4位投了否决票的人来说:我的问题到底出了什么问题?仅供参考,“后者”的反义词是。一般来说,当使用后者时,前者也是如此,反之亦然。为什么它在
0+{}
中进行字符串连接,而在
0+{valueOf:()=>{return 5;}}
中进行数字相加?它遵循什么规则来决定?
Object.prototype.valueOf
是特殊的。看看这本书。此函数的任务是返回由用户定义的对象的基本表示形式。每当在需要原语的位置对包含对象的语句求值时,就会自动调用该函数,并且返回的值(在本例中为数字5)将取代对象的位置。