在javascript中添加Object和Array的结果是什么?

Mic*_*leA 5 javascript types type-conversion

我在地址栏中尝试了这段代码:

javascript: alert({} + [])

结果是:[object Object].

javascript: alert(typeof ({} + []))

结果是:字符串.

有人可以向我解释发生了什么吗?

Que*_*tin 4

连接运算符 (+) 将两个字符串值连接在一起。如果你给它的东西不是字符串值,那么它.toString()首先调用它们的方法。

回应下面的评论,“是的,确实如此!”

Object.prototype.toString = function () { return "a"; };
Array.prototype.toString = function () { return "b"; };
var foo = {} + [];
alert(foo); // alerts 'ab'
Run Code Online (Sandbox Code Playgroud)

如果没有对原型进行上述修改,那么您alert({} + [])将采用{}.toString()( )"[Object object]"[].toString()(""数组为空时) ,然后将它们连接起来 ( 仍然"[Object object]") 。这是一个字符串,并且typeof会告诉你它是一个字符串。