While [] + []
是一个空字符串,[] + {}
is "[object Object]"
和{} + []
is是0
。为什么是{} + {}
NaN?
> {} + {}
NaN
我的问题是,为什么不({} + {}).toString()
为"[object Object][object Object]"
而NaN.toString()
为"NaN"
,这部分已经在这里回答。
我的问题是为什么仅在客户端发生这种情况?在服务器端(Node.js){} + {}
是"[object Object][object Object]"
。
> {} + {}
'[object Object][object Object]'
总结:
在客户端:
[] + [] // Returns ""
[] + {} // Returns "[object Object]"
{} + [] // Returns 0
{} + {} // Returns NaN
NaN.toString() // Returns "NaN"
({} + {}).toString() // Returns "[object Object][object Object]"
var a = {} + {}; // 'a' will be "[object Object][object Object]"
在Node.js中:
[] + [] // Returns "" (like on the client)
[] + {} // Returns "[object Object]" (like on the client)
{} + [] // Returns "[object Object]" (not like on the client)
{} + {} // Returns "[object Object][object Object]" (not like on the client)
{}
可以根据上下文将其解释为表达式或对象原语。客户端和服务器上的代码可能相同,但是{}
由于输入代码的上下文不同,因此其解释也不同。