为什么在JavaScript中{} + {}变成“ [object Object] [object Object]”,而[] + []变成空字符串?

Ali*_*eza 5 javascript arrays string constructor object

为什么在JavaScript中{} + {}变成空字符串"[object Object][object Object]"[] + []变成空字符串""?它们不是JavaScript中的两个对象吗?那么,串联的结果为何不同?有什么特殊原因吗?

为什么结果不是这样"[object Array][object Array]"

Cer*_*nce 5

+与物体使用的对象被强制为字符串,结果连接起来。

当将普通对象转换为字符串时,将得到[object Object]

console.log(
  String({})
);
Run Code Online (Sandbox Code Playgroud)

另一方面,当数组变成字符串时,在内部.join(',')会在数组上调用该数组,并用逗号将所有元素连接在一起。但是,如果数组中不存在任何元素,则合并结果为空字符串。

只是出于好奇(不要在实际代码中执行此操作!),如果删除Array.prototype.joinString(someArr)将不再能够调用.join,结果将是[object Array],因为被转换为字符串的对象的构造函数名为Array

delete Array.prototype.join;
console.log(String([])); // Result: [object Array]
Run Code Online (Sandbox Code Playgroud)
Look at the results in your browser console, not the snippet console
(because removing Array.prototype.join breaks the snippet console)
Run Code Online (Sandbox Code Playgroud)