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

时间:2015-01-01 13:42:48

标签: javascript oop

我的代码如下所示

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

alert(x)

我想知道为什么Object.prototype.toString被实现以返回[object Object]以及为什么没有实现它以返回"{name: 'John'}"

3 个答案:

答案 0 :(得分:3)

根据ECMAScript Language Specification

  

15.2.4.2 Object.prototype.toString()调用toString方法时,将执行以下步骤:

     
      
  1. 如果未定义此值,请返回" [对象未定义]"。
  2.   
  3. 如果此值为null,则返回" [object Null]"。
  4.   
  5. 设O是调用ToObject传递此值作为参数的结果。
  6.   
  7. 让class为O的[[Class]]内部属性的值。
  8.   
  9. 返回String值,该值是连接三个字符串" [object",class和"]"的结果。
  10.   

语言设计如下。我猜你不得不问Brendan Eich或TC39。

答案 1 :(得分:2)

来自Mozilla https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString

每个对象都有一个toString()方法,当要将对象表示为文本值或者以期望字符串的方式引用对象时,会自动调用该方法。默认情况下,toString()方法由来自Object的每个对象继承。如果在自定义对象中未覆盖此方法,则toString()将返回“[object type]”,其中type是对象类型。

答案 2 :(得分:1)

请参阅@Leo和@Joel Gregory的答案,获取规范中的解释。您可以使用JSON.stringify显示对象的内容,例如:

var log = Helpers.log2Screen;

var obj = { name: 'John' }

log(obj.toString());
log('<code>'+JSON.stringify(obj)+'</code>');
<!-- a few external helpers -->
<script src="http://kooiinc.github.io/JSHelpers/Helpers-min.js"></script>