Перейти к содержанию

Символы

В ECMAScript 2015 введен тип symbol (символ) — примитивный тип данных, такой же, как number и string.

Введение

Значения типа symbol создаются с помощью вызова конструктора Symbol.

let sym1 = Symbol()

let sym2 = Symbol('key') // Необязательный строковый ключ

Символы неизменяемы и уникальны.

let sym2 = Symbol('key')
let sym3 = Symbol('key')

sym2 === sym3 // false, символы уникальны

Подобно строкам, символы можно использовать как ключи для свойств объекта.

let sym = Symbol()

let obj = {
  [sym]: 'value'
}

console.log(obj[sym]) // "value"

Символы можно использовать вместе с вычисляемыми свойствами, чтобы объявлять свойства объектов и члены классов:

const getClassNameSymbol = Symbol()

class C {
  [getClassNameSymbol]() {
    return 'C'
  }
}

let c = new C()
let className = c[getClassNameSymbol]() // "C"

Заранее определенные символы

Кроме символов, определяемых пользователем, существуют заранее определенные встроенные символы. Встроенные символы нужны для отражения внутреннего поведения языка.

Список заранее определенных символов:

  • Symbol.hasInstance - Метод, который определяет, распознает ли объект конструктора переданный объект как экземпляр этого конструктора. Вызывается оператором instanceof.
  • Symbol.isConcatSpreadable - Логическое значение, означающее, должен ли объект раскладываться на элементы массива при использовании с Array.prototype.concat.
  • Symbol.iterator - Метод, который возвращает итератор по умолчанию для объекта. Вызывается конструкцией for-of.
  • Symbol.match - Метод для регулярных выражений, который сопоставляет регулярное выражение со строкой. Вызывается методом String.prototype.match.
  • Symbol.replace - Метод для регулярных выражений, который заменяет совпавшие подстроки в строке. Вызывается методом String.prototype.replace.
  • Symbol.search - Метод для регулярных выражений, который возвращает позицию в строке, где находится совпадение с регулярным выражением. Вызывается методом String.prototype.search.
  • Symbol.species - Свойство, содержащее функцию, которая служит в качестве конструктора для унаследованных объектов.
  • Symbol.split - Метод для регулярных выражений, который разбивает строку по позициям совпадений с регулярным выражением. Вызывается методом String.prototype.split.
  • Symbol.toPrimitive - Метод, который превращает объект в соответствующее примитивное значение. Вызывается абстрактной операцией ToPrimitive.
  • Symbol.toStringTag - Строковое значение, которое используется для создания строкового значения по умолчанию, описывающего объект. Вызывается встроенным методом Object.prototype.toString.
  • Symbol.unscopables - Объект, имена собственных свойств которого — это имена свойств, привязки к которым не включаются в окружение, создаваемое конструкцией with для соответствующих объектов.

Ссылки