Spec-Zone.ru › JavaScript

Symbol.toStringTag

Базовый уровень Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в различных версиях браузеров. Она доступна во всех браузерах с сентября 2015 года.

Статическое свойство данных Symbol.toStringTag представляет собой общеизвестный символ Symbol.toStringTag. Object.prototype.toString() ищет этот символ в значении this для свойства, содержащего строку, которая представляет тип объекта.

Попробовать

class ValidatorClass {
  get [Symbol.toStringTag]() {
    return "Validator";
  }
}

console.log(Object.prototype.toString.call(new ValidatorClass()));
// Expected output: "[object Validator]"

Значение

Общеизвестный символ Symbol.toStringTag.

Атрибуты свойства Symbol.toStringTag
Записываемое нет
Перечислимое нет
Конфигурируемое нет

Примеры

Теги по умолчанию

Некоторые значения не имеют Symbol.toStringTag, но имеют специальные toString() представления. Полный список см. в Object.prototype.toString().

Object.prototype.toString.call("foo"); // "[object String]"
Object.prototype.toString.call([1, 2]); // "[object Array]"
Object.prototype.toString.call(3); // "[object Number]"
Object.prototype.toString.call(true); // "[object Boolean]"
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(null); // "[object Null]"
// … and more

Встроенные символы toStringTag

Большинство встроенных объектов предоставляют собственное свойство [Symbol.toStringTag]. Свойство [Symbol.toStringTag] почти всех встроенных объектов не является записываемым, не является перечислимым и конфигурируемым; исключением является Iterator, которое является записываемым по соображениям совместимости.

Для объектов-конструкторов, таких как Promise, свойство устанавливается в Constructor.prototype, чтобы все экземпляры конструктора наследовали [Symbol.toStringTag] и могли быть преобразованы в строку. Для объектов, не являющихся конструкторами, таких как Math и JSON, свойство устанавливается как статическое, чтобы сам объект пространства имен мог быть преобразован в строку. Иногда конструктор также предоставляет собственный метод toString (например, Intl.Locale), и в этом случае свойство [Symbol.toStringTag] используется только при явном вызове Object.prototype.toString его.

Object.prototype.toString.call(new Map()); // "[object Map]"
Object.prototype.toString.call(function* () {}); // "[object GeneratorFunction]"
Object.prototype.toString.call(Promise.resolve()); // "[object Promise]"
// … and more

Пользовательский тег с toStringTag

При создании собственного класса JavaScript по умолчанию использует тег "Object":

class ValidatorClass {}

Object.prototype.toString.call(new ValidatorClass()); // "[object Object]"

Теперь, с помощью toStringTag, вы можете установить свой собственный тег:

class ValidatorClass {
  get [Symbol.toStringTag]() {
    return "Validator";
  }
}

Object.prototype.toString.call(new ValidatorClass()); // "[object Validator]"

toStringTag доступен для всех объектов прототипов DOM

В связи с изменением спецификации WebIDL в середине 2020 года браузеры добавляют свойство Symbol.toStringTag ко всем объектам прототипов DOM. Например, для доступа к свойству Symbol.toStringTag на HTMLButtonElement:

const test = document.createElement("button");
test.toString(); // "[object HTMLButtonElement]"
test[Symbol.toStringTag]; // "HTMLButtonElement"

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

Спецификация
Спецификация языка ECMAScript® 2027
# sec-symbol.tostringtag

Совместимость с браузерами

Настольные Мобильные Серверные
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
toStringTag
49
15
51
36
10
49
51
36
10
5.0
49
10
1.0.0
1.0
6.0.0
dom_objects
50
79
78
37
14
50
79
37
14
5.0
50
14
?
1.0
No

См. также

  • Полифилл для Symbol.toStringTag в core-js
  • Object.prototype.toString()

© 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/Symbol/toStringTag

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API