JavaScript метод Object.prototype.toString()

Определение и применение

JavaScript метод Object.prototype.toString() возвращает строковое представление указанного объекта, он вызывается без аргументов и должен возвращать строковое значение.

По умолчанию, метод toString() наследуется каждым объектом, произошедшим от объекта Object, он автоматически вызывается, когда объект должен быть представлен в строковом контексте, или когда объект участвует в выражении, где ожидается строковое значение.

Как правило, метод toString() не вызывается явно, а переопределяется в пользовательских объектах, если этот метод не переопределён в пользовательском объекте, то метод toString() возвращает строку следующего вида:

JavaScript
"[object тип_объекта]"
// под типом объекта понимается Object, String, Number и так далее

Object.prototype.toString.call(value) даёт метку типа, в том числе для null и undefined. Метка может зависеть от Symbol.toStringTag, поэтому она не является надёжной проверкой типа произвольного объекта.

Поддержка браузерами

Спецификация: ecma262

Поддерживается во всех основных браузерах с 2015 года.

Показать браузеры
Совместимостьjavascript.builtins.Object.toString
ВозможностьКомпьютерыМобильные
ChromeEdgeFirefoxOperaSafariChrome AndroidFirefox for AndroidOpera AndroidSafari on iOSSamsung BrowserWebView AndroidWebView on iOS
toString✓1✓12✓1✓3✓1✓18✓4✓10.1✓1✓1.0✓1✓1

поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31

JavaScript синтаксис

JavaScript
obj.toString();

Спецификация

ECMAScript: Object.prototype.toString()

Примеры, попробуйте сами

В примере «Строковое представление объекта» показан результат вызова метода.

Строковое представление объекта

Измените свойства исходного объекта и сравните результат до и после вызова метода.

index.html
HTML
<!doctype html>
<html lang="ru">
  <head>
    <meta charset="UTF-8" />
    <title>Строковое представление объекта</title>
  </head>
  <body>
    <p>Результат выполнения выводится в консоль.</p>
  </body>
</html>
main.js
JavaScript
let obj = {
    // инициализируем переменную, содержащую объект
    a: 1,
    b: 2,
    c() {
        return this.a + this.b
    },
}

console.log(obj.toString()) // "[object Object]"

В этом примере мы инициализировали переменную, содержащую объект и с помощью метода toString() мы возвращаем строковое представление указанного объекта.

В следующем примере мы используем метод toString() с другими типами объектов:

В примере «Метки встроенных типов» показан результат вызова метода.

Метки встроенных типов

Измените свойства исходного объекта и сравните результат до и после вызова метода.

index.html
HTML
<!doctype html>
<html lang="ru">
  <head>
    <meta charset="UTF-8" />
    <title>Метки встроенных типов</title>
  </head>
  <body>
    <p>Результат выполнения выводится в консоль.</p>
  </body>
</html>
main.js
JavaScript
console.log(Object.prototype.toString.apply(new Date())) // "[object Date]"
console.log(Object.prototype.toString.apply(new Number())) // "[object Number]"
console.log(Object.prototype.toString.apply(new String())) // "[object String]"

// начиная с версии JavaScript 1.8.5
console.log(Object.prototype.toString.apply(null)) // "[object Null]"
console.log(Object.prototype.toString.apply(undefined)) // "[object Undefined]"

В этом примере с использованием метода apply() мы явно вызываем метод toString() для демонстрации его работы на прочих типах объектов.

В следующем примере мы с Вами рассмотрим как переопределить метод toString() по умолчанию:

В примере «Переопределение строкового представления» показан результат вызова метода.

Переопределение строкового представления

Измените свойства исходного объекта и сравните результат до и после вызова метода.

index.html
HTML
<!doctype html>
<html lang="ru">
  <head>
    <meta charset="UTF-8" />
    <title>Переопределение строкового представления</title>
  </head>
  <body>
    <p>Результат выполнения выводится в консоль.</p>
  </body>
</html>
main.js
JavaScript
// создадим функцию конструктор
function Person(name, family) {
    this.name = name
    this.family = family
}

// создаем объект типа Calc и инициализируем им переменную
let person = new Person('Василий', 'Инкрементов')

console.log(person.toString()) // "[object Object]"

// переопределяем метод toString() по умолчанию
Person.prototype.toString = function () {
    return 'Имя: ' + this.name + ' Фамилия: ' + this.family
}

console.log(person.toString()) // "Имя: Василий Фамилия: Инкрементов"

// создаем объект типа Calc и инициализируем им переменную
let person2 = new Person('Иван', 'Декрементов')

console.log(person2.toString()) // "Имя: Иван Фамилия: Декрементов"

В этом примере мы создали функцию конструктор Person и создали объект типа Person, которым инициализировали переменную. После этого мы вызываем метод toString() на пользовательском объекте и в качестве возвращаемого значения по умолчанию (унаследованное от Object) получаем [object Object].

После этого мы переопределяем метод toString() по умолчанию, который возвращает, значения свойств name и family объекта и вызываем метод toString() снова. Обратите внимание, что в этот раз мы получаем более полезную информацию. Далее мы создаем еще один объект типа Person и так же используем метод toString().