Object.prototype.toString()
Базовый уровень Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
Метод toString() экземпляров Object возвращает строку, представляющую этот объект. Предполагается, что этот метод будет переопределен производными объектами для пользовательской логики приведения типов.
Попробуйте
const map = new Map(); console.log(map.toString()); // Expected output: "[object Map]"
Синтаксис
toString()
Параметры
По умолчанию toString() не принимает параметров. Однако объекты, которые наследуются от Object, могут переопределить его своими собственными реализациями, которые принимают параметры. Например, методы Number.prototype.toString() и BigInt.prototype.toString() принимают необязательный параметр radix.
Возвращаемое значение
Строка, представляющая объект.
Описание
JavaScript вызывает метод toString для преобразования объекта в примитивное значение. Вам редко требуется вызывать метод toString самостоятельно; JavaScript автоматически вызывает его, когда встречает объект там, где ожидается примитивное значение.
Этот метод вызывается в приоритете при строковом преобразовании, но числовое преобразование и примитивное преобразование вызывают valueOf() в приоритете. Однако, поскольку базовый метод valueOf() возвращает объект, метод toString() обычно вызывается в конце, если только объект не переопределяет valueOf(). Например, +[1] возвращает 1, потому что его метод toString() возвращает "1", который затем преобразуется в число.
Все объекты, которые наследуются от Object.prototype (то есть все, кроме объектов с null-прототипом), наследуют метод toString(). Когда вы создаете собственный объект, вы можете переопределить toString(), чтобы вызвать пользовательский метод, и таким образом ваш пользовательский объект может быть преобразован в строковое значение. В качестве альтернативы вы можете добавить метод [Symbol.toPrimitive](), который позволяет еще больше контролировать процесс преобразования и всегда будет предпочтительнее valueOf или toString для любого преобразования типов.
Чтобы использовать базовый Object.prototype.toString() с объектом, в котором он переопределен (или вызвать его на null или undefined), вам нужно вызвать Function.prototype.call() или Function.prototype.apply(), передав объект, который вы хотите проверить, в качестве первого параметра (называемого thisArg).
const arr = [1, 2, 3]; arr.toString(); // "1,2,3" Object.prototype.toString.call(arr); // "[object Array]"
Object.prototype.toString() возвращает "[object Type]", где Type — это тип объекта. Если объект имеет свойство Symbol.toStringTag, значение которого является строкой, это значение будет использоваться как Type. Многие встроенные объекты, включая Map и Symbol, имеют Symbol.toStringTag. Некоторые объекты, предшествующие ES6, не имеют Symbol.toStringTag, но, тем не менее, имеют специальный тег. Они включают (тег совпадает с именем типа, указанным ниже):
Array-
Function(любой объект, чейtypeofвозвращает"function") ErrorBooleanNumberStringDateRegExp
Объект arguments возвращает "[object Arguments]". Все остальное, включая пользовательские классы, если только они не имеют пользовательский Symbol.toStringTag, вернет "[object Object]".
Object.prototype.toString(), вызванный для null и undefined, возвращает [object Null] и [object Undefined] соответственно.
Примеры
Переопределение toString для пользовательских объектов
Вы можете создать функцию, которая будет вызываться вместо метода toString() по умолчанию. Созданная вами функция toString() должна возвращать строковое значение. Если она возвращает объект и метод вызывается неявно во время преобразования типов, то ее результат игнорируется, а вместо него используется значение связанного метода, valueOf(), или же выбрасывается TypeError, если ни один из этих методов не возвращает примитив.
Следующий код определяет класс Dog.
class Dog {
constructor(name, breed, color, sex) {
this.name = name;
this.breed = breed;
this.color = color;
this.sex = sex;
}
}
Если вы вызываете метод toString(), явно или неявно, на экземпляре Dog, он возвращает значение по умолчанию, унаследованное от Object:
const theDog = new Dog("Gabby", "Lab", "chocolate", "female");
theDog.toString(); // "[object Object]"
`${theDog}`; // "[object Object]"
Следующий код переопределяет метод toString() по умолчанию. Этот метод генерирует строку, содержащую name, breed, color и sex объекта.
class Dog {
constructor(name, breed, color, sex) {
this.name = name;
this.breed = breed;
this.color = color;
this.sex = sex;
}
toString() {
return `Dog ${this.name} is a ${this.sex} ${this.color} ${this.breed}`;
}
}
При наличии этого кода всякий раз, когда экземпляр Dog используется в строковом контексте, JavaScript автоматически вызывает метод toString().
const theDog = new Dog("Gabby", "Lab", "chocolate", "female");
`${theDog}`; // "Dog Gabby is a female chocolate Lab"
Использование toString() для определения класса объекта
toString() может использоваться с любым объектом и (по умолчанию) позволяет получить его класс.
const toString = Object.prototype.toString; toString.call(new Date()); // [object Date] toString.call(new String()); // [object String] // Math has its Symbol.toStringTag toString.call(Math); // [object Math] toString.call(undefined); // [object Undefined] toString.call(null); // [object Null]
Использование toString() таким образом ненадежно; объекты могут изменять поведение Object.prototype.toString(), определяя свойство Symbol.toStringTag, что приводит к неожиданным результатам. Например:
const myDate = new Date(); Object.prototype.toString.call(myDate); // [object Date] myDate[Symbol.toStringTag] = "myDate"; Object.prototype.toString.call(myDate); // [object myDate] Date.prototype[Symbol.toStringTag] = "prototype polluted"; Object.prototype.toString.call(new Date()); // [object prototype polluted]
Спецификации
Совместимость с браузерами
| Десктоп | Мобильные | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
toString |
1 |
12 |
1 |
3 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
1 |
1 |
1.0.0 |
1.0 |
0.10.0 |
Смотрите также
- Полифил
Object.prototype.toStringс поддержкойSymbol.toStringTagвcore-js Object.prototype.valueOf()Number.prototype.toString()Symbol.toPrimitiveSymbol.toStringTag
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString