为什么 Object.prototype.toString 返回 [object Object]?

5

我的代码如下所示

var obj = { name: 'John' }
var x = obj.toString();// produce "[object Object]"

alert(x)

我想知道为什么 Object.prototype.toString 实现返回 [object Object] 而不是实现返回 "{name: 'John'}"


2
你需要问语言设计者。 - Pointy
3个回答

8
根据ECMAScript语言规范
15.2.4.2 Object.prototype.toString() 当调用toString方法时,执行以下步骤:
  1. 如果this值为undefined,则返回"[object Undefined]"。
  2. 如果this值为null,则返回"[object Null]"。
  3. 让O成为将this值作为参数传递给ToObject的结果。
  4. 让class成为O的[[Class]]内部属性的值。
  5. 返回将三个字符串"[object "、class和"]"连接起来的字符串值。
语言是这样设计的。我想你应该问Brendan Eich或TC39。

5

请查看@Leo和@Joel Gregory提供的规范解释。您可以使用JSON.stringify来显示对象内容,例如:

const log = (...args) => document.querySelector("pre").textContent += `${args.join("\n")}\n`;
const obj = { name: 'John' }

log(obj.toString());
log(JSON.stringify(obj));
<pre></pre>


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接