JavaScript - Символьный объект
Здравствуйте, начинающие разработчики JavaScript! Сегодня мы отправимся в увлекательное путешествие в мир JavaScript символов. Не волнуйтесь, если вы новички в программировании; я проведу вас через это понятие шаг за шагом, так же, как я делал это для countless студентов на протяжении многих лет моего преподавания. Итак, погружаемся!
JavaScript Symbol
Представьте, что вы на модном маскарадном балу. Все wearing маски, и каждая mask уникальна. В мире JavaScript символы resemble эти маски - они являются уникальными идентификаторами, которые помогают нам distinguishes одно от другого, даже если они seem схожими при первом взгляде.
Символ - это примитивный тип данных в JavaScript, введенный в ECMAScript 2015 (ES6). Он отличается от других примитивов, таких как строки или числа, потому что каждый символ гарантируется уникальным.
Давайте создадим наш первый символ:
const mySymbol = Symbol();
console.log(mySymbol); // Вывод: Symbol()
Здесь мы создали символ и храним его в переменной mySymbol
. Когда мы выводим его в консоль, мы видим Symbol()
. Но не позволяйте себя обмануть - каждый раз, когда вы создаете символ, это全新的, уникальный идентификатор.
Синтаксис
Создание символа просто. Вы можете сделать это двумя способами:
-
Без описания:
const sym1 = Symbol();
-
С описанием:
const sym2 = Symbol('Мое описание');
Описание является optional и主要用于 debugging целей. Оно не влияет на уникальность символа.
Вот интересный факт: вы не можете использовать ключевое слово new
с символом. Если вы try new Symbol()
, JavaScript брошит ошибку. Это как пытаться клонировать уникальную mask на нашем маскарадном балу - это просто не работает!
Свойства символа
Символы имеют несколько интересных свойств. Давайте рассмотрим их:
Symbol.length
console.log(Symbol.length); // Вывод: 0
Это всегда возвращает 0. Это как если бы мы спрашивали, сколько людей носят particular уникальную mask на нашем балу - всегда только один!
Symbol.prototype
Это прототип для конструктора символа. Это немного advanced, так что мы оставим это на другой день.
Методы символа
Символы приходят с некоторыми удобными методами. Давайте посмотрим на несколько:
Метод | Описание |
---|---|
Symbol.for(key) | Ищет существующие символы с заданным ключом и возвращает его, если он найден. В противном случае создается новый символ и возвращается. |
Symbol.keyFor(sym) | Получает ключ shared символа из глобального реестра символов для заданного символа. |
toString() | Возвращает строковое представление символа. |
Давайте увидим, как это работает:
const globalSymbol = Symbol.for('myGlobalSymbol');
console.log(Symbol.keyFor(globalSymbol)); // Вывод: "myGlobalSymbol"
const localSymbol = Symbol('myLocalSymbol');
console.log(Symbol.keyFor(localSymbol)); // Вывод: undefined
console.log(localSymbol.toString()); // Вывод: "Symbol(myLocalSymbol)"
В этом примере globalSymbol
как mask, зарегистрированная у входа на наш бал. Любой может спросить о ней по имени. localSymbol
, с другой стороны, как mask, которую вы сделали сами - она уникальна для вас, и никто другой не знает о ней.
Примеры
Давайте рассмотрим несколько практических примеров использования символов:
Пример 1: Использование символов в качестве уникальных ключей свойств
const NAME = Symbol('name');
const AGE = Symbol('age');
const person = {
[NAME]: 'Alice',
[AGE]: 30
};
console.log(person[NAME]); // Вывод: "Alice"
console.log(person[AGE]); // Вывод: 30
В этом примере мы используем символы в качестве ключей в объекте. Это обеспечивает, что эти свойства не будут conflict с любыми другими свойствами, даже если они имеют одинаковое имя.
Пример 2: Символы в цикле for...in
const VISIBLE = Symbol('visible');
const HIDDEN = Symbol('hidden');
const obj = {
[VISIBLE]: 'This is visible',
[HIDDEN]: 'This is hidden',
normalProperty: 'This is normal'
};
for (let prop in obj) {
console.log(prop); // Вывод: "normalProperty"
}
Обратите внимание, как символы свойства не включены в цикл for...in
. Это как если бы они носили невидимые плащи на нашем маскарадном балу!
Преимущества использования символов
-
Уникальность: Символы всегда уникальны. Это делает их идеальными для добавления свойств к объектам, когда вы хотите быть уверенными, что вы не перезаписываете существующие свойства.
-
Приватность: Символ-ключевые свойства не являются enumerable по умолчанию. Это означает, что они не появляются в циклах
for...in
илиObject.keys()
. -
Без碰撞: При работе с большими кодбазами или сторонними библиотеками, символы помогают предотвратить naming collision.
-
Специальное поведение: Некоторые内置 символы позволяют вам customize поведение объектов. Например,
Symbol.iterator
позволяет вам определить, как объект должен быть iterated.
В заключение, символы как secret handshakes в мире JavaScript. Они предоставляют способ создания уникальных идентификаторов, которые могут быть использованы различными способами для улучшения функциональности и maintainability вашего кода.
помните, как каждая mask на нашем маскарадном балу уникальна и special, так же уникальны и символы в JavaScript. Они могут показаться загадочными сначала, но с практикой вы найдете их мощными инструментами в вашем наборе для программирования.
Продолжайте программировать, продолжайте учиться и, самое главное, получайте удовольствие от вашего путешествия в JavaScript!
Credits: Image by storyset