Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
js_exams.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
359 Кб
Скачать
☆
  1. Тип данных Symbol. Его особенности, свойства, методы.

Тип данных Symbol служит для создания уникальных идентификаторов.

Объявление

let sym = Symbol();

Не new Symbol, а просто Symbol, так как это – примитив. Каждый символ – уникален. У функции Symbol есть необязательный аргумент «имя символа». Его можно использовать для описания символа, в целях отладки, но при этом, если у двух символов одинаковое имя, то это не значит, что они равны.

Глобальные символы

Существует «глобальный реестр» символов, который позволяет, при необходимости, иметь общие «глобальные» символы, которые можно получить из реестра по имени. Для чтения (или создания, при отсутствии) «глобального» символа служит вызов Symbol.for(имя).

// создание символа в реестре

let name = Symbol.for("name");

Таким образом, можно из разных частей программы, обратившись к реестру, получить единый глобальный символ с именем "name".

У вызова Symbol.for, который возвращает символ по имени, есть обратный вызов – Symbol.keyFor(sym). Он позволяет получить по глобальному символу его имя:

// получение имени символа

Symbol.keyFor(name); // name

Symbol.keyFor возвращает undefined, если символ не глобальный.

Использование символов

Самое широкое применение символов предусмотрено внутри самого стандарта JavaScript. В современном стандарте есть много системных символов. Их список есть в спецификации, в таблице Well-known Symbols. В спецификации для краткости символы принято обозначать как „@@имя“, например @@iterator, но доступны они как свойства Symbol.

Например:

  • Symbol.toPrimitive – идентификатор для свойства, задающего функцию преобразования объекта в примитив.

  • Symbol.iterator – идентификатор для свойства, задающего функцию итерации по объекту.

Допустим, в новом стандарте нам надо добавить к объекту «особый» функционал, например, функцию, которая задаёт преобразование объекта к примитиву. Мы ведь не можем просто сказать, что «свойство obj.toPrimitive теперь будет задавать преобразование к примитиву и автоматически вызываться в таких-то ситуациях». Это опасно. Мы не можем так просто взять и придать особый смысл свойству. Мало ли, вполне возможно, что свойство с таким именем уже используется в существующем коде, и если сделать его особым, то он сломается. Нельзя просто взять и зарезервировать какие-то свойства существующих объектов для нового функционала. Поэтому ввели целый тип «символы». Их можно использовать для задания таких свойств, так как они: уникальны; не участвуют в циклах; заведомо не сломают старый код, который о них слыхом не слыхивал. Чтобы получить все символы объекта, есть особый вызов Object.getOwnPropertySymbols. Эта функция возвращает все символы в объекте (и только их).

  1. Приведение типов, неявное и явное. Взаимодействие типов с операторами.

В JavaScript есть три преобразования:

  1. Строковое преобразование.

  2. Числовое преобразование.

  3. Преобразование к логическому значению.

Строковое преобразование

Строковое преобразование происходит, когда требуется представление чего-либо в виде строки. Например, в неявном виде его производит функция alert.

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

Можно также осуществить преобразование явным вызовом String(val):

String(null) === "null"; // true

Также для явного преобразования применяется оператор "+", у которого один из аргументов строка. При «сложении» числа со строкой, число преобразуется к строке и происходит его конкатенация (склеивание) со вторым операндом. Например:

123 + "test"; // "123test"

"123" + undefined; // "123undefined"

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]