diff options
Diffstat (limited to 'files/uk/glossary/символ/index.html')
-rw-r--r-- | files/uk/glossary/символ/index.html | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/files/uk/glossary/символ/index.html b/files/uk/glossary/символ/index.html new file mode 100644 index 0000000000..fd9ceb772a --- /dev/null +++ b/files/uk/glossary/символ/index.html @@ -0,0 +1,100 @@ +--- +title: Символ +slug: Glossary/Символ +tags: + - ECMAScript2015 + - JavaScript + - Sharing + - Символ + - Словник + - Тип даних +translation_of: Glossary/Symbol +--- +<p>У {{Glossary("JavaScript")}}, символ (Symbol) є {{Glossary("Primitive", "простим типом даних")}}.</p> + +<p>Значення типу <strong>символ</strong> також називають "Символьним значенням". У середовищі виконання JavaScript символьне значення створюється викликом функції {{jsxref("Symbol")}}, яка динамічно створює анонімне, унікальне значення. Символ можна використовувати як властивість об'єкта.</p> + +<p>Символ може мати необов'язковий опис, але тільки для відлагодження.</p> + +<p><strong>Символьне значення</strong> є унікальним ідентифікатором. Наприклад,</p> + +<pre class="brush: js">// Ось два символи з однаковим описом, +let Sym1 = Symbol("Sym"); +let Sym2 = Symbol("Sym"); + +console.log(Sym1 == Sym2); // повертає "false" +// Символи гарантовано є унікальними. +// Навіть якщо ми створимо багато символів з тим самим описом, +// вони будуть різними значеннями.</pre> + +<p>Заувага: Якщо ви знайомі з Ruby чи іншою мовою, що має свій аналог “символів” – будь ласка, не плутайте. Символи JavaScript інші.</p> + +<p>Символьний тип - це новий функціонал у ECMAScript 2015, і він не має еквіваленту у ECMAScript 5. У деяких мовах програмування символьний тип даних також називається "атом".</p> + +<h3 id="Символи_не_мають_автоматичного_перетворення_у_рядки">Символи не мають автоматичного перетворення у "рядки"</h3> + +<p>Більшість значень у JavaScript підтримують неявне перетворення у рядки. Наприклад, ми можемо викликати <code>alert</code> майже з будь-яким значенням, і це спрацює. Символи особливі. Вони не перетворюються автоматично.</p> + +<p>Наприклад,</p> + +<pre class="brush: js">let Sym = Symbol("Sym"); + +alert(Sym); // TypeError: Cannot convert a Symbol value to a string</pre> + +<p>Це “мовний захист” від плутанини, тому що рядки та символи є фундаментально різними, і не повинні випадково перетворюватись один на одного.</p> + +<p>Якщо нам дуже потрібно вивести символ, треба викликати на ньому метод <code>.toString()</code>, наприклад,</p> + +<pre class="brush: js">let Sym = Symbol("Sym"); + +alert(Sym.toString()); // Symbol(Sym), тепер це працює</pre> + +<p>Або ми можемо скористатись властивістю символу <code>symbol.description</code>, щоб дістати його опис, наприклад,</p> + +<pre class="brush: js">let _Sym = Symbol("Sym"); + +alert(_Sym.description); // Sym</pre> + +<h3 id="Добревідомі_символи">Добревідомі символи</h3> + +<p>Клас {{jsxref("Symbol")}} має константи для так званих добревідомих символів. Ці символи дозволяють налаштовувати взаємодію JS з об'єктом, використовуючи їх в якості ключів. Прикладами добревідомих символів є: {{jsxref("Symbol.iterator")}} для подібних до масивів об'єктів, або {{jsxref("Symbol.search")}} для рядкових об'єктів.</p> + +<p>Вони наведені у таблиці специфікації <a href="https://tc39.github.io/ecma262/#sec-well-known-symbols">Добревідомі символи</a>:</p> + +<ul> + <li><code>Symbol.hasInstance</code></li> + <li><code>Symbol.isConcatSpreadable</code></li> + <li><code>Symbol.iterator</code></li> + <li><code>Symbol.toPrimitive</code></li> + <li>…і так далі.</li> +</ul> + +<h3 id="Глобальний_реєстр_символів">Глобальний реєстр символів</h3> + +<p>Методами, що мають доступ до глобального реєстру символів, є {{jsxref("Symbol.for()")}} і {{jsxref("Symbol.keyFor()")}}; це посередники між глобальною таблицею (або "реєстром") символів та середовищем виконання. Реєстр символів переважно збудований інфраструктурою компілятора Javascript, а вміст реєстру символів не доступний для інфраструктури виконання Javascript, окрім як за допомогою цих методів. Метод <em><code>Symbol.for(tokenString)</code></em> повертає символьне значенняз реєстру, а <em><code>Symbol.keyFor(symbolValue)</code></em> повертає рядковий токен з реєстру; ці функції зворотні одна одній, тому наступне є істиною:</p> + +<pre class="brush: js">Symbol.keyFor(Symbol.for("tokenString")) === "tokenString"; // true</pre> + +<h2 id="Дізнайтеся_більше">Дізнайтеся більше</h2> + +<h3 id="Загальні_знання">Загальні знання</h3> + +<ul> + <li><a href="https://en.wikipedia.org/wiki/Symbol_(programming)">Symbol (programming)</a> на Вікіпедії</li> + <li><a href="/uk/docs/Web/JavaScript/Data_structures">Типи та структури даних у JavaScript</a></li> + <li><a href="http://2ality.com/2014/12/es6-symbols.html">Символи у ECMAScript 6</a></li> + <li>{{jsxref("Symbol")}} у довідці MDN</li> + <li>{{jsxref("Object.getOwnPropertySymbols()")}}</li> +</ul> + +<section id="Quick_Links"> +<ul> + <li><a href="/uk/docs/Glossary">Словник MDN Web Docs</a> + + <ul> + <li>{{Glossary("JavaScript")}}</li> + <li>{{Glossary("Primitive","Простий тип даних")}}</li> + </ul> + </li> +</ul> +</section> |