我的代码如下所示
var obj = { name: 'John' }
var x = obj.toString();// produce "[object Object]"
alert(x)
我想知道为什么Object.prototype.toString
被实现以返回[object Object]
以及为什么没有实现它以返回"{name: 'John'}"
?
答案 0 :(得分:3)
根据ECMAScript Language Specification:
15.2.4.2 Object.prototype.toString()调用toString方法时,将执行以下步骤:
- 如果未定义此值,请返回" [对象未定义]"。
- 如果此值为null,则返回" [object Null]"。
- 设O是调用ToObject传递此值作为参数的结果。
- 让class为O的[[Class]]内部属性的值。
- 返回String值,该值是连接三个字符串" [object",class和"]"的结果。
醇>
语言设计如下。我猜你不得不问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>