2015-01-01 2 views
-2

мой код показан нижепочему Object.prototype.toString возвращение [объект Object]

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

 
alert(x)

я хочу знать, почему Object.prototype.toString реализуется для возврата [object Object] и почему это не реализовано, чтобы вернуться "{name: 'John'}"?

+1

Вы должны спросить языковые дизайнеры. – Pointy

ответ

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>

2

В соответствии с ECMAScript Language Specification:

15.2.4.2 Object.prototype.toString() Когда метод ToString вызывается, предпринимаются следующие шаги:

  1. Если это значение не определено, return "[object Undefined]".
  2. Если это значение равно null, верните «[объект Null]».
  3. Пусть O является результатом вызова ToObject, передающего это значение в качестве аргумента.
  4. Пусть класс является значением внутреннего свойства [[Class]] для O.
  5. Возвращает значение строки, которое является результатом объединения трех строк «[объект», класс и «]».

Язык разработан таким образом. Наверное, вам придется попросить Брендана Эйха или TC39.

2

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

Каждый объект имеет метод ToString(), который автоматически вызывается, когда объект должен быть представлен как текстовое значение или когда объект упоминается в порядке, в котором строки ожидается. По умолчанию метод toString() наследуется каждым объектом, сгенерированным из Object. Если этот метод не переопределяется в пользовательском объекте, toString() возвращает «[тип объекта]», где type - тип объекта.

Смежные вопросы