From 218934fa2ed1c702a6d3923d2aa2cc6b43c48684 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:43:23 -0500 Subject: initial commit --- .../index.html" | 100 +++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 "files/uk/glossary/\321\201\320\270\320\274\320\262\320\276\320\273/index.html" (limited to 'files/uk/glossary/символ/index.html') diff --git "a/files/uk/glossary/\321\201\320\270\320\274\320\262\320\276\320\273/index.html" "b/files/uk/glossary/\321\201\320\270\320\274\320\262\320\276\320\273/index.html" new file mode 100644 index 0000000000..fd9ceb772a --- /dev/null +++ "b/files/uk/glossary/\321\201\320\270\320\274\320\262\320\276\320\273/index.html" @@ -0,0 +1,100 @@ +--- +title: Символ +slug: Glossary/Символ +tags: + - ECMAScript2015 + - JavaScript + - Sharing + - Символ + - Словник + - Тип даних +translation_of: Glossary/Symbol +--- +

У {{Glossary("JavaScript")}}, символ (Symbol) є {{Glossary("Primitive", "простим типом даних")}}.

+ +

Значення типу символ також називають "Символьним значенням". У середовищі виконання JavaScript символьне значення створюється викликом функції {{jsxref("Symbol")}}, яка динамічно створює анонімне, унікальне значення. Символ можна використовувати як властивість об'єкта.

+ +

Символ може мати необов'язковий опис, але тільки для відлагодження.

+ +

Символьне значення є унікальним ідентифікатором. Наприклад,

+ +
// Ось два символи з однаковим описом,
+let Sym1 = Symbol("Sym");
+let Sym2 = Symbol("Sym");
+
+console.log(Sym1 == Sym2); // повертає "false"
+// Символи гарантовано є унікальними.
+// Навіть якщо ми створимо багато символів з тим самим описом,
+// вони будуть різними значеннями.
+ +

Заувага: Якщо ви знайомі з Ruby чи іншою мовою, що має свій аналог “символів” – будь ласка, не плутайте. Символи JavaScript інші.

+ +

Символьний тип - це новий функціонал у ECMAScript 2015, і він не має еквіваленту у ECMAScript 5. У деяких мовах програмування символьний тип даних також називається "атом".

+ +

Символи не мають автоматичного перетворення у "рядки"

+ +

Більшість значень у JavaScript підтримують неявне перетворення у рядки. Наприклад, ми можемо викликати alert майже з будь-яким значенням, і це спрацює. Символи особливі. Вони не перетворюються автоматично.

+ +

Наприклад,

+ +
let Sym = Symbol("Sym");
+
+alert(Sym); // TypeError: Cannot convert a Symbol value to a string
+ +

Це “мовний захист” від плутанини, тому що рядки та символи є фундаментально різними, і не повинні випадково перетворюватись один на одного.

+ +

Якщо нам дуже потрібно вивести символ, треба викликати на ньому метод .toString(), наприклад,

+ +
let Sym = Symbol("Sym");
+
+alert(Sym.toString()); // Symbol(Sym), тепер це працює
+ +

Або ми можемо скористатись властивістю символу symbol.description, щоб дістати його опис, наприклад,

+ +
let _Sym = Symbol("Sym");
+
+alert(_Sym.description); // Sym
+ +

Добревідомі символи

+ +

Клас {{jsxref("Symbol")}} має константи для так званих добревідомих символів. Ці символи дозволяють налаштовувати взаємодію JS з об'єктом, використовуючи їх в якості ключів. Прикладами добревідомих символів є: {{jsxref("Symbol.iterator")}} для подібних до масивів об'єктів, або {{jsxref("Symbol.search")}} для рядкових об'єктів.

+ +

Вони наведені у таблиці специфікації Добревідомі символи:

+ + + +

Глобальний реєстр символів

+ +

Методами, що мають доступ до глобального реєстру символів, є {{jsxref("Symbol.for()")}} і {{jsxref("Symbol.keyFor()")}}; це посередники між глобальною таблицею (або "реєстром") символів та середовищем виконання. Реєстр символів переважно збудований інфраструктурою компілятора Javascript, а вміст реєстру символів не доступний для інфраструктури виконання Javascript, окрім як за допомогою цих методів. Метод Symbol.for(tokenString) повертає символьне значенняз реєстру, а Symbol.keyFor(symbolValue) повертає рядковий токен з реєстру; ці функції зворотні одна одній, тому наступне є істиною:

+ +
Symbol.keyFor(Symbol.for("tokenString")) === "tokenString"; // true
+ +

Дізнайтеся більше

+ +

Загальні знання

+ + + + -- cgit v1.2.3-54-g00ecf