--- title: Лексична граматика slug: Web/JavaScript/Reference/Lexical_grammar tags: - JavaScript - Посібник - ключове слово - лексична граматика - літерал translation_of: Web/JavaScript/Reference/Lexical_grammar --- <div>{{JsSidebar("More")}}</div> <p>Ця стаття описує лексичну граматику JavaScript. Текст коду скриптів ECMAScript сканується зліва направо та перетворюється на послідовність вхідних елементів, якими є токени, керівні символи, символи розриву рядка, коментарі або <a href="/uk/docs/Glossary/whitespace">пробільні символи</a>. ECMAScript також визначає певні ключові слова та має правила для автоматичної вставки крапки з комою для завершення інструкцій.</p> <h2 id="Керівні_символи">Керівні символи</h2> <p>Керівні символи не мають візуального відображення, але використовуються для керування інтерпретацією тексту.</p> <table class="standard-table"> <caption>Керівні символи Юнікоду</caption> <thead> <tr> <th>Код символа</th> <th>Назва</th> <th>Скорочення</th> <th>Опис</th> </tr> </thead> <thead> <tr> <td><code>U+200C</code></td> <td>Роз'єднувач нульової ширини<br> (Zero width non-joiner)</td> <td><ZWNJ></td> <td>Розташовується між символами, щоб запобігти об'єднанню їх у лігатури у певних мовах (<a href="https://en.wikipedia.org/wiki/Zero-width_non-joiner">Вікіпедія</a>).</td> </tr> <tr> <td><code>U+200D</code></td> <td>Об'єднувач нульової ширини<br> (Zero width joiner)</td> <td><ZWJ></td> <td>Розташовується між символами, які інакше не були б об'єднані, щоб відобразити символи у їхній об'єднаній формі у певних мовах (<a href="https://en.wikipedia.org/wiki/Zero-width_joiner">Вікіпедія</a>).</td> </tr> <tr> <td><code>U+FEFF</code></td> <td>Маркер порядку байтів<br> (Byte order mark)</td> <td><BOM></td> <td>Використовується на початку скрипта, щоб позначити його як Юнікод, та для позначення порядку байтів (<a href="https://uk.wikipedia.org/wiki/%D0%9C%D0%B0%D1%80%D0%BA%D0%B5%D1%80_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BA%D1%83_%D0%B1%D0%B0%D0%B9%D1%82%D1%96%D0%B2">Вікіпедія</a>).</td> </tr> </thead> </table> <h2 id="Пробільні_символи">Пробільні символи</h2> <p><a href="/uk/docs/Glossary/whitespace">Пробільні символи</a> покращують читабельність тексту коду та відділяють токени один від одного. Ці символи зазвичай не є обов'язковими для функціональності коду. Часто використовують <a href="https://en.wikipedia.org/wiki/Minification_%28programming%29">інструменти мініфікації</a> для прибирання пробільних символів, щоб зменшити кількість даних, які необхідно передати.</p> <table class="standard-table"> <caption>Пробільні символи</caption> <thead> <tr> <th>Код символа</th> <th>Назва</th> <th>Скорочення</th> <th>Опис</th> <th>Екранована послідовність</th> </tr> </thead> <tbody> <tr> <td>U+0009</td> <td>Табуляція символа<br> (Character tabulation)</td> <td><HT></td> <td>Горизонтальна табуляція</td> <td>\t</td> </tr> <tr> <td>U+000B</td> <td>Табуляція рядка<br> (Line tabulation)</td> <td><VT></td> <td>Вертикальна табуляція</td> <td>\v</td> </tr> <tr> <td>U+000C</td> <td>Зміна сторінки<br> (Form feed)</td> <td><FF></td> <td>Керівний символ розриву сторінки (<a href="https://en.wikipedia.org/wiki/Page_break#Form_feed">Вікіпедія</a>).</td> <td>\f</td> </tr> <tr> <td>U+0020</td> <td>Пробіл<br> (Space)</td> <td><SP></td> <td>Звичайний пробіл</td> <td></td> </tr> <tr> <td>U+00A0</td> <td>Нерозривний пробіл<br> (No-break space)</td> <td><NBSP></td> <td>Звичайний пробіл, але відсутня позиція, де можливий розрив рядка</td> <td></td> </tr> <tr> <td>Інші</td> <td>Інші пробільні символи Юнікоду</td> <td><USP></td> <td><a href="https://uk.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B1%D1%96%D0%BB">Пробіли Юнікоду на Вікіпедії</a></td> <td></td> </tr> </tbody> </table> <h2 id="Символи_розриву_рядка">Символи розриву рядка</h2> <p>На додачу до <a href="/en-US/docs/Glossary/Whitespace">пробільних</a> символів, символи розриву рядка використовуються для покращення читабельності тексту коду. Однак, у деяких випадках символи розриву рядка можуть вплинути на виконання коду JavaScript, оскільки існують декілька місць, де вони заборонені. Символи розриву рядка також впливають на процес <a href="#Автоматична_вставка_крапки_з_комою">автоматичної вставки крапки з комою</a>. Символи розриву рядка відповідають класу <strong>\s</strong> у <a href="/uk/docs/Web/JavaScript/Guide/Regular_Expressions">регулярних виразах</a>.</p> <p>Лише наступні коди символів Юнікоду сприймаються як символи розриву рядка у ECMAScript, інші символи розриву сприймаються як пробільні (наприклад, символ Наступний рядок (Next Line), NEL, U+0085 вважається пробільним символом).</p> <table class="standard-table"> <caption>Символи розриву рядка</caption> <thead> <tr> <th>Код символа</th> <th>Назва</th> <th>Скорочення</th> <th>Опис</th> <th>Екранована послідовність</th> </tr> </thead> <thead> </thead> <tbody> <tr> <td>U+000A</td> <td>Зміна рядка<br> (Line Feed)</td> <td><LF></td> <td>Символ нового рядка в системах UNIX.</td> <td>\n</td> </tr> <tr> <td>U+000D</td> <td>Повернення каретки<br> (Carriage Return)</td> <td><CR></td> <td>Символ нового рядка у Commodore та ранній системі Mac.</td> <td>\r</td> </tr> <tr> <td>U+2028</td> <td>Роздільник рядків<br> (Line Separator)</td> <td><LS></td> <td><a href="https://uk.wikipedia.org/wiki/%D0%A1%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB_%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D1%80%D1%8F%D0%B4%D0%BA%D0%B0">Вікіпедія</a></td> <td></td> </tr> <tr> <td>U+2029</td> <td>Роздільник абзаців<br> (Paragraph Separator)</td> <td><PS></td> <td><a href="https://uk.wikipedia.org/wiki/%D0%A1%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB_%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D1%80%D1%8F%D0%B4%D0%BA%D0%B0">Вікіпедія</a></td> <td></td> </tr> </tbody> </table> <h2 id="Коментарі">Коментарі</h2> <p>Коментарі використовуються для додавання приміток, зауваг, пропозицій чи застережень до коду JavaScript. Це робить код легшим для читання та розуміння. Їх також можна використовувати для відключення коду, щоб запобігти його виконанню; це може бути цінним інструментом відлагодження.</p> <p>JavaScript має два давніх способи додавання коментарів у код.</p> <p>Перший - це коментарі <code>//</code><strong>;</strong> він перетворює весь текст, що розташований за ним, на коментар. Наприклад:</p> <pre class="brush: js notranslate">function comment() { // Це однорядковий коментар JavaScript console.log('Всім привіт!'); } comment(); </pre> <p>Другий спосіб - це стиль <code>/* */</code>, він набагато гнучкіший.</p> <p>Наприклад, ви можете використати його на одному єдиному рядку:</p> <pre class="brush: js notranslate">function comment() { /* Це однорядковий коментар JavaScript */ console.log('Всім привіт!'); } comment();</pre> <p>Ви також можете створювати багаторядкові коментарі, ось так:</p> <pre class="brush: js notranslate">function comment() { /* Цей коментар містить декілька рядків. Зауважте, що коментар не потрібно завершувати, поки ми не закінчили. */ console.log('Всім привіт!'); } comment();</pre> <p>Ви також можете за бажанням використати його всередині рядка, хоча це може зробити ваш код важчим для читання, тому його варто використовувати з обережністю:</p> <pre class="brush: js notranslate">function comment(x) { console.log('Всім ' + x /* вставити значення x */ + ' !'); } comment('привіт');</pre> <p>На додачу, ви можете відключити код, щоб уникнути його виконання, огорнувши код ось так:</p> <pre class="brush: js notranslate">function comment() { /* console.log('Всім привіт!'); */ } comment();</pre> <p>У цьому випадку виклик <code>console.log()</code> не виконується, оскільки знаходиться всередині коментаря. Таким чином можна відключити будь-яку кількість рядків коду.</p> <h2 id="Коментарі_шебанг">Коментарі шебанг</h2> <p>Спеціалізований третій синтаксис коментарів, <strong>коментар шебанг</strong>, знаходиться в процесі стандартизації у ECMAScript (дивіться <a href="https://github.com/tc39/proposal-hashbang">Hashbang Grammar proposal</a>).</p> <p>Коментар шебанг поводиться так само, як однорядковий коментар (<code>//</code>). Але він починається з позначки <code>#!</code> та <strong>дозволений лише на самому початку тексту скрипта</strong>. Також зауважте, що перед позначкою <code>#!</code> не можна ставити жодних пробільних знаків. Коментар складається з усіх символів, що стоять після <code>#!</code> до самого кінця першого рядка; дозволений лише один такий коментар.</p> <p>Коментар шебанг визначає шлях до специфічного інтерпретатора JavaScript, який ви бажаєте використати для виконання скрипта. Приклад виглядає наступним чином:</p> <pre class="brush: js notranslate">#!/usr/bin/env node console.log("Всім привіт"); </pre> <div class="blockIndicator note"> <p><strong>Заувага</strong>: Коментарі шебанг у JavaScript імітують <a href="https://uk.wikipedia.org/wiki/%D0%A8%D0%B5%D0%B1%D0%B0%D0%BD%D0%B3_(Unix)">шебанги в Unix</a>, що використовуються для запуску файлів з відповідним інтерпретатором.</p> </div> <div class="blockIndicator warning"> <p>Хоча символ <a href="https://uk.wikipedia.org/wiki/%D0%9C%D0%B0%D1%80%D0%BA%D0%B5%D1%80_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BA%D1%83_%D0%B1%D0%B0%D0%B9%D1%82%D1%96%D0%B2">BOM</a> перед коментарем шебанг працює у переглядачі, його не радять використовувати у скрипті з шебангом. BOM не працюватиме, якщо ви намагаєтесь виконати скрипт у Unix/Linux. Тому використовуйте UTF-8 без символа BOM, якщо ви хочете виконувати скрипти безпосередньо з оболонки.</p> </div> <p>Стиль коментарів <code>#!</code> має використовуватись тільки для того, щоб вказати інтерпретатор JavaScript. У всіх інших випадках просто ставте коментар <code>//</code> (чи багаторядковий коментар).</p> <h2 id="Ключові_слова">Ключові слова</h2> <h3 id="Зарезервовані_ключові_слова_у_ECMAScript_2015">Зарезервовані ключові слова у ECMAScript 2015</h3> <ul class="threecolumns"> <li>{{jsxref("Statements/break", "break")}}</li> <li>{{jsxref("Statements/switch", "case")}}</li> <li>{{jsxref("Statements/try...catch", "catch")}}</li> <li>{{jsxref("Statements/class", "class")}}</li> <li>{{jsxref("Statements/const", "const")}}</li> <li>{{jsxref("Statements/continue", "continue")}}</li> <li>{{jsxref("Statements/debugger", "debugger")}}</li> <li>{{jsxref("Statements/default", "default")}}</li> <li>{{jsxref("Operators/delete", "delete")}}</li> <li>{{jsxref("Statements/do...while", "do")}}</li> <li>{{jsxref("Statements/if...else", "else")}}</li> <li>{{jsxref("Statements/export", "export")}}</li> <li>{{jsxref("Statements/class", "extends")}}</li> <li>{{jsxref("Statements/try...catch", "finally")}}</li> <li>{{jsxref("Statements/for", "for")}}</li> <li>{{jsxref("Statements/function", "function")}}</li> <li>{{jsxref("Statements/if...else", "if")}}</li> <li>{{jsxref("Statements/import", "import")}}</li> <li>{{jsxref("Operators/in", "in")}}</li> <li>{{jsxref("Operators/instanceof", "instanceof")}}</li> <li>{{jsxref("Operators/new", "new")}}</li> <li>{{jsxref("Statements/return", "return")}}</li> <li>{{jsxref("Operators/super", "super")}}</li> <li>{{jsxref("Statements/switch", "switch")}}</li> <li>{{jsxref("Operators/this", "this")}}</li> <li>{{jsxref("Statements/throw", "throw")}}</li> <li>{{jsxref("Statements/try...catch", "try")}}</li> <li>{{jsxref("Operators/typeof", "typeof")}}</li> <li>{{jsxref("Statements/var", "var")}}</li> <li>{{jsxref("Operators/void", "void")}}</li> <li>{{jsxref("Statements/while", "while")}}</li> <li>{{jsxref("Statements/with", "with")}}</li> <li>{{jsxref("Operators/yield", "yield")}}</li> </ul> <h3 id="Ключові_слова_зарезервовані_на_майбутнє">Ключові слова, зарезервовані на майбутнє</h3> <p>Наступні слова зарезервовані як ключові слова специфікацією ECMAScript. Наразі вони не мають спеціальної функціональності, але невдовзі, можливо, матимуть, тому їх не можна використовувати в якості ідентифікаторів.</p> <p>Наступні слова завжди зарезервовані:</p> <ul> <li><code>enum</code></li> </ul> <p>Наступні слова є зарезервованими лише у строгому режимі:</p> <ul class="threecolumns"> <li><code>implements</code></li> <li><code>interface</code></li> <li>{{jsxref("Statements/let", "let")}}</li> <li><code>package</code></li> <li><code>private</code></li> <li><code>protected</code></li> <li><code>public</code></li> <li><code>static</code></li> </ul> <p>Наступні є зарезервованими лише у коді модулів:</p> <ul> <li><code>await</code></li> </ul> <h4 id="Ключові_слова_зарезервовані_на_майбутнє_у_старших_стандартах">Ключові слова, зарезервовані на майбутнє у старших стандартах</h4> <p>Далі наведено ключові слова, зарезервовані на майбутнє старшими специфікаціями ECMAScript (ECMAScript від 1 до 3).</p> <ul class="threecolumns"> <li><code>abstract</code></li> <li><code>boolean</code></li> <li><code>byte</code></li> <li><code>char</code></li> <li><code>double</code></li> <li><code>final</code></li> <li><code>float</code></li> <li><code>goto</code></li> <li><code>int</code></li> <li><code>long</code></li> <li><code>native</code></li> <li><code>short</code></li> <li><code>synchronized</code></li> <li><code>throws</code></li> <li><code>transient</code></li> <li><code>volatile</code></li> </ul> <p>Крім того, літерали <code>null</code>, <code>true</code> та <code>false</code> не можна використовувати в якості ідентифікаторів у ECMAScript.</p> <h3 id="Використання_зарезервованого_слова">Використання зарезервованого слова</h3> <p>Зарезервовані слова, насправді, стосуються лише <em>ідентифікаторів</em> (на противагу<em> іменам ідентифікаторів</em>). Як описано у <a href="http://es5.github.com/#A.1">es5.github.com/#A.1</a>, це усі <em>імена ідентифікаторів</em>, які не включають <em>зарезервовані слова</em>.</p> <pre class="brush: js notranslate">a.import a['import'] a = { import: 'test' }. </pre> <p>З іншого боку, наступний код є некоректним, тому що це <em>ідентифікатор</em>, ними є <em>імена ідентифікаторів</em> без зарезервованих слів. Ідентифікатори використовуються для <em>оголошення функцій</em>, <em>функціональних виразів</em>,<em> оголошення змінних</em> і т.д. <em>Імена ідентифікаторів</em> використовуються для<em> виразу елемента (MemberExpression)</em>,<em> виразу виклику (CallExpression)</em> і т.д.</p> <pre class="brush: js notranslate">function import() {} // некоректно.</pre> <h3 id="Ідентифікатори_зі_спеціальними_значеннями">Ідентифікатори зі спеціальними значеннями</h3> <p>Декілька ідентифікаторів мають спеціальні значення у певному контексті, не будучи ключовими словами жодного виду. Ними є:</p> <ul class="threecolumns"> <li>{{jsxref("Functions/arguments", "arguments")}}</li> <li>{{jsxref("Functions/get", "get")}}</li> <li>{{jsxref("Functions/set", "set")}}</li> </ul> <h2 id="Літерали">Літерали</h2> <h3 id="Літерал_null">Літерал null</h3> <p>Додаткову інформацію дивіться також у {{jsxref("null")}}.</p> <pre class="brush: js notranslate">null</pre> <h3 id="Булевий_літерал">Булевий літерал</h3> <p>Дивіться також додаткову інформацію у {{jsxref("Boolean")}}.</p> <pre class="brush: js notranslate">true false</pre> <h3 id="Числові_літерали">Числові літерали</h3> <p>Типи {{jsxref("Число","Number")}} та {{jsxref("BigInt")}} використовують числові літерали.</p> <h4 id="Десятковий">Десятковий</h4> <pre class="brush: js notranslate">1234567890 42 // Будьте обережні при використанні нуля попереду 0888 // 888 розбирається як десяткове 0777 // розбирається як вісімкове, 511 у десятковій системі </pre> <p>Зауважте, що десяткові літерали можуть починатися з нуля (<code>0</code>), за яким іде інша десяткова цифра, але, якщо усі цифри після <code>0</code> менші за 8, число інтерпретується як вісімкове. Це не спричинить викидання помилки у JavaScript, дивіться <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=957513">помилку 957513</a>. Також дивіться статтю щодо {{jsxref("parseInt", "parseInt()")}}</p> <h5 id="Експоненціальний">Експоненціальний</h5> <p>Десятковий експоненціальний літерал позначається наступним форматом: <code>beN</code>; де <code>b</code> - мантиса (число, ціле чи з рухомою комою), далі символ <code>e</code> (який слугує роздільником, або <em>експоненціальним показником</em>) та<em> </em><code>N</code>, яке вказує <em>порядок</em> – ціле число зі знаком (згідно з 2019 ECMA-262): </p> <pre class="brush: js notranslate">0e-5 // => 0 0e+5 // => 0 5e1 // => 50 175e-2 // => 1.75 1e3 // => 1000 1e-3 // => 0.001 </pre> <h4 id="Двійковий">Двійковий</h4> <p>Синтаксис двійкових чисел використовує нуль на початку, за яким іде латинська літера "B", маленька чи велика (<code>0b</code> або <code>0B</code>). Оскільки цей синтаксис новий у ECMAScript 2015, дивіться таблицю сумісності з веб-переглядачами, наведену нижче. Якщо цифри після <code>0b</code> не є 0 чи 1, викидається наступна помилка {{jsxref("SyntaxError")}}: "Missing binary digits after 0b".</p> <pre class="brush: js notranslate">var FLT_SIGNBIT = 0b10000000000000000000000000000000; // 2147483648 var FLT_EXPONENT = 0b01111111100000000000000000000000; // 2139095040 var FLT_MANTISSA = 0B00000000011111111111111111111111; // 8388607</pre> <h4 id="Вісімковий">Вісімковий</h4> <p>Синтаксис вісімкових чисел використовує нуль на початку, за яким іде латинська літера "O", маленька чи велика (<code>0o</code> або <code>0O)</code>. Оскільки цей синтаксис новий у ECMAScript 2015, дивіться таблицю сумісності з веб-переглядачами, наведену нижче. Якщо цифри після <code>0o</code> виходять за межі діапазону (01234567), викидається наступна помилка {{jsxref("SyntaxError")}}: "Missing octal digits after 0o".</p> <pre class="brush: js notranslate">var n = 0O755; // 493 var m = 0o644; // 420 // Також можна просто через нуль на початку // (дивіться заувагу щодо десяткових чисел вище) 0755 0644 </pre> <h4 id="Шістнадцятковий">Шістнадцятковий</h4> <p>Синтаксис шістнадцяткових чисел використовує нуль на початку, за яким іде латинська літера "X", велика чи маленька (<code>0x</code> або <code>0X</code>). Якщо цифри після 0x виходять за межі діапазону (0123456789ABCDEF), викидається наступна помилка {{jsxref("SyntaxError")}}: "Identifier starts immediately after numeric literal".</p> <pre class="brush: js notranslate">0xFFFFFFFFFFFFFFFFF // 295147905179352830000 0x123456789ABCDEF // 81985529216486900 0XA // 10 </pre> <h4 id="Літерал_BigInt">Літерал BigInt</h4> <p>Тип {{jsxref("BigInt")}} є числовим простим типом у JavaScript, який може представляти цілі числа з довільною точністю. Літерали BigInt створюються додаванням <code>n</code> в кінець цілого числа.</p> <pre class="brush: js notranslate">123456789123456789n // 123456789123456789 0o777777777777n // 68719476735 0x123456789ABCDEFn // 81985529216486895 0b11101001010101010101n // 955733 </pre> <p>Зауважте, що старі вісімкові числа з просто нулем на початку не працюватимуть з <code>BigInt</code>:</p> <pre class="brush: js example-bad notranslate">// 0755n // SyntaxError: invalid BigInt syntax</pre> <p>Для вісімкових чисел <code>BigInt</code> завжди використовуйте нуль з літерою "o" (великою чи маленькою):</p> <pre class="brush: js example-good notranslate">0o755n</pre> <p>Більше інформації щодо <code>BigInt</code> дивіться у статті <a href="/uk/docs/Web/JavaScript/Data_structures#Тип_BigInt">Структури даних JavaScript</a>.</p> <h4 id="Числові_роздільники">Числові роздільники</h4> <p>Щоб покращити читабельність числових літералів, можна використовувати підкреслення (<code>_</code>, <code>U+005F</code>) в якості роздільників:</p> <pre class="brush: js notranslate">// роздільники у десяткових числах 1_000_000_000_000 1_050.95 // роздільники у двійкових числах 0b1010_0001_1000_0101 // роздільники у вісімкових числах 0o2_2_5_6 // роздільники у шістнадцяткових числах 0xA0_B0_C0 // роздільники у BigInt 1_000_000_000_000_000_000_000n </pre> <p>Зверніть увагу на ці обмеження:</p> <pre class="brush: js example-bad notranslate">// Не можна ставити більше одного підкреслення підряд 100__000; // SyntaxError // Не можна ставити в кінці числового літерала 100_; // SyntaxError // Не можна використовувати після нуля на початку 0 0_1; // SyntaxError </pre> <h3 id="Обєктні_літерали">Об'єктні літерали</h3> <p>Більше інформації дивіться також на сторінках {{jsxref("Object")}} та <a href="/uk/docs/Web/JavaScript/Reference/Operators/Ініціалізація_об’єктів">Ініціалізатор об'єкта</a>.</p> <pre class="brush: js notranslate">var o = { a: 'foo', b: 'bar', c: 42 }; // скорочений запис. Нове у ES2015 var a = 'foo', b = 'bar', c = 42; var o = {a, b, c}; // замість var o = { a: a, b: b, c: c }; </pre> <h3 id="Масивні_літерали">Масивні літерали</h3> <p>Більше інформації дивіться також у {{jsxref("Array")}}.</p> <pre class="brush: js notranslate">[1954, 1974, 1990, 2014]</pre> <h3 id="Рядкові_літерали">Рядкові літерали</h3> <p>Рядковий літерал - це нуль чи більше кодів символів Юнікоду всередині одинарних або подвійних лапок. Коди символів Юнікоду також можуть бути представлені екранованими послідовностями. Усі коди символів можуть з'являтись безпосередньо у рядковому літералі, окрім цих закриваючих кодів символів:</p> <ul> <li>U+005C \ (зворотній слеш),</li> <li>U+000D <CR></li> <li>та U+000A <LF>.</li> </ul> <p>До появи <a href="https://github.com/tc39/proposal-json-superset">пропозиції зробити весь текст формату JSON дозволеним у ECMA-262</a>, неекрановані U+2028 <LS> та U+2029 <PS> також були заборонені у рядкових літералах.</p> <p>Будь-які коди символів можуть з'являтись у вигляді екранованої послідовності. Рядкові літерали повертають значення ECMAScript String. Під час генерування цих значень String коди символів Юнікоду кодуються форматом UTF-16.</p> <pre class="brush: js notranslate">'foo' "bar"</pre> <h4 id="Шістнадцяткові_екрановані_послідовності">Шістнадцяткові екрановані послідовності</h4> <p>Шістнадцяткові екрановані послідовності складаються з <code>\x</code> та рівно двох шістнадцяткових символів, що відображають кодову одиницю чи код символа у діапазоні від 0x0000 до 0x00FF.</p> <pre class="brush: js notranslate">'\xA9' // "©" </pre> <h4 id="Екрановані_послідовності_Юнікоду">Екрановані послідовності Юнікоду</h4> <p>Екранована послідовність Юнікоду складається рівно з чотирьох шістнадцяткових символів, записаних після <code>\u</code>. Вона відображає кодову одиницю у кодуванні UTF-16. Для кодів символів від U+0000 до U+FFFF кодова одиниця дорівнює коду символа. Коди символів від U+10000 до U+10FFFF потребують двох екранованих послідовностей, які відображають дві кодові одиниці (сурогатну пару), що використовуються для кодування символа; сурогатна пара відрізняється від коду символа.</p> <p>Дивіться також {{jsxref("String.fromCharCode()")}} та {{jsxref("String.prototype.charCodeAt()")}}.</p> <pre class="brush: js notranslate">'\u00A9' // "©" (U+A9)</pre> <h4 id="Екранування_кодів_символів_Юнікоду">Екранування кодів символів Юнікоду</h4> <p>Екранування коду символа Юнікоду складається з <code>\u{</code>, далі код символа у шістнадцятковому форматі, за ним <code>}</code>. Значення шістнадцяткових символів має знаходитись в діапазоні між 0 та 0x10FFFF включно. Коди символів у діапазоні від U+10000 до U+10FFFF не потребують представлення у вигляді сурогатної пари. Екранування кодів символів було додане у JavaScript у ECMAScript 2015 (ES6).</p> <p>Дивіться також {{jsxref("String.fromCodePoint()")}} та {{jsxref("String.prototype.codePointAt()")}}.</p> <pre class="brush: js notranslate">'\u{2F804}' // CJK COMPATIBILITY IDEOGRAPH-2F804 (U+2F804) // той самий символ у вигляді сурогатної пари '\uD87E\uDC04'</pre> <h3 id="Літерал_регулярного_виразу">Літерал регулярного виразу</h3> <p>Більше інформації дивіться також у {{jsxref("RegExp")}}.</p> <pre class="brush: js notranslate">/ab+c/g // Літерал "порожнього" регулярного виразу // Порожня група необхідна, // щоб уникнути неоднозначності щодо однорядкових коментарів. /(?:)/</pre> <h3 id="Шаблонні_літерали">Шаблонні літерали</h3> <p>Дивіться також <a href="/uk/docs/Web/JavaScript/Reference/Template_literals">шаблонні рядки</a>.</p> <pre class="brush: js notranslate">`текстовий рядок` `текстовий рядок 1 текстовий рядок 2` `текст ${вираз} текст` тег `текст ${вираз} текст`</pre> <h2 id="Автоматична_вставка_крапки_з_комою">Автоматична вставка крапки з комою</h2> <p>Деякі <a href="/uk/docs/Web/JavaScript/Reference/Statements">інструкції JavaScript</a> повинні завершуватись крапкою з комою, і тому підпадають під автоматичну вставку крапки з комою (ASI, automatic semicolon insertion):</p> <ul> <li>Порожній оператор</li> <li><code>let</code>, <code>const</code>, інструкція змінної</li> <li><code>import</code>, <code>export</code>, оголошення модуля</li> <li>Інструкція виразу</li> <li><code>debugger</code></li> <li><code>continue</code>, <code>break</code>, <code>throw</code></li> <li><code>return</code></li> </ul> <p>Специфікація ECMAScript визначає <a href="https://tc39.github.io/ecma262/#sec-rules-of-automatic-semicolon-insertion">три правила вставки крапки з комою</a>.</p> <p>1. Крапка з комою вставляється перед, коли <a href="#Символи_розриву_рядка">символ розриву рядка</a> чи "}" вважається таким, що недозволений за синтаксисом.</p> <pre class="brush: js notranslate">{ 1 2 } 3 // перетворюється на { 1 2 ;} 3;</pre> <p>2. Крапка з комою вставляється в кінці, коли виявлено кінець вхідного набору токенів, але синтаксичний аналізатор неспроможний розібрати єдиний вхідний набір як завершену програму.</p> <p>Тут <code>++</code> не сприймається як <a href="/uk/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Increment">постфіксний оператор</a>, що застосовується до змінної <code>b</code>, тому що між <code>b</code> та <code>++</code> знаходиться символ розриву рядка.</p> <pre class="brush: js notranslate">a = b ++c // перетворюється на a = b; ++c; </pre> <p>3. Крапка з комою вставляється в кінці, коли інструкція з обмеженими граматичними застосуваннями супроводжується символом розриву рядка. Ці інструкції з правилом "жодних розривів рядка в цьому місці" наступні:</p> <ul> <li>Постфіксні вирази (<code>++</code> та <code>--</code>)</li> <li><code>continue</code></li> <li><code>break</code></li> <li><code>return</code></li> <li><code>yield</code>, <code>yield*</code></li> <li><code>module</code></li> </ul> <pre class="brush: js notranslate">return a + b // перетворюється на return; a + b; </pre> <h2 id="Специфікації">Специфікації</h2> <table class="standard-table"> <thead> <tr> <th scope="col">Специфікація</th> </tr> </thead> <tbody> <tr> <td>{{SpecName('ESDraft', '#sec-ecmascript-language-lexical-grammar', 'Lexical Grammar')}}</td> </tr> </tbody> </table> <h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> <p>{{Compat("javascript.grammar")}}</p> <h3 id="Хід_реалізації">Хід реалізації</h3> <p>Наведена нижче таблиця надає щоденний статус реалізації цієї функціональності, оскільки функціональність ще не досягла кросбраузерної стабільності. Дані генеруються запуском відповідних тестів функціональності у <a href="https://github.com/tc39/test262">Test262</a>, стандартному тестовому наборі JavaScript, на нічній збірці чи на останньому релізі рушія JavaScript кожного веб-переглядача.</p> <div>{{EmbedTest262ReportResultsTable("hashbang")}}</div> <h2 id="Див._також">Див. також</h2> <ul> <li><a href="http://whereswalden.com/2013/08/12/micro-feature-from-es6-now-in-firefox-aurora-and-nightly-binary-and-octal-numbers/">Jeff Walden: Двійкові та вісімкові числа</a></li> <li><a href="http://mathiasbynens.be/notes/javascript-escapes">Mathias Bynens: екрановані послідовності символів JavaScript</a></li> <li>{{jsxref("Boolean")}}</li> <li>{{jsxref("Число", "Number")}}</li> <li>{{jsxref("RegExp")}}</li> <li>{{jsxref("String")}}</li> </ul>