Обзор

Как известно, все имена свойств объектов в ES5 являются строками, что легко может привести к конфликтам в именах свойств. Например, если вы используете объект, предоставленный кем-то другим, но хотите добавить к объекту новый метод (режим примеси), имя нового метода может конфликтовать с существующим. Если есть механизм, гарантирующий, что имя каждого свойства уникально, это принципиально предотвратит конфликт имен атрибутов. Вот почему ES6 представляет Symbol.

ES6 представляет новый примитивный тип данных, Symbol, который представляет собой уникальное значение. Это седьмой тип данных языка JavaScript. Первые шесть: undefined, null, Boolean, String, Number, и Объект соответственно.

Значение Symbol генерируется функцией Symbol. То есть имя свойства объекта теперь может иметь два типа: исходная строка и новый тип Symbol. Таким образом, любое имя свойства, относящееся к типу Symbol, является уникальным, и можно гарантировать, что оно не будет конфликтовать с другими именами свойств. См. следующее:

В приведенном выше коде переменная s является уникальным значением. Результат оператора typeof указывает, что переменная s является типом данных Symbol, а не другими типами, такими как string.

ПРИМЕЧАНИЕ: команду new нельзя использовать перед функцией Symbol, иначе будет сообщено об ошибке. Это связано с тем, что сгенерированный Symbol является примитивным типом значения, а не объектом. То есть, поскольку значение Symbol не является объектом, вы не можете добавить свойство. По сути, это тип данных, похожий на string.

Есть еще несколько моментов, на которые следует обратить внимание при использовании Symbol.

  1. Функция Symbol может принимать в качестве параметра строку, указывающую на описание экземпляра Symbol, в основном для отображения в консоли или при преобразовании в строку для упрощения работы. выделить. Пожалуйста, рассмотрите код ниже:

В приведенном выше коде s1 и s2 — это два значения Symbol. Если никакие параметры не добавлены, их выводами в консоли являются оба Symbol(), что не способствует различению. С параметрами равносильно добавлению к ним описания, вывод можно различать — какое значение какое.

2. Если параметр для Symbol является объектом, вызывается метод объекта toString, который преобразует параметр в строку до создания значения Symbol. Вот пример:

Обратите внимание, что параметр функции Symbol представляет собой только описание текущего значения Symbol, поэтому возвращаемые значения функции Symbol одного и того же параметр не равен. См. приведенный ниже код:

В приведенном выше коде s1 и s2 являются возвращаемыми значениями функции Symbol, а также параметры одинаковы, но они не равный!

3. Значение Symbol нельзя оценивать с другими типами значений; иначе система сообщит об ошибке. Рассмотрим следующий код:

Однако значение Symbol можно явно преобразовать в строку:

Кроме того, значение Symbol также можно преобразовать в логическое значение, но нельзя преобразовать в числовое значение. См. код ниже:

P.S. Если вам понравилась эта статья и вы хотите больше подобных, ставьте ❤ и делитесь с друзьями, которым это может понадобиться. Спасибо!