diff options
Diffstat (limited to 'files/uk/web/javascript/reference/statements/label/index.html')
-rw-r--r-- | files/uk/web/javascript/reference/statements/label/index.html | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/files/uk/web/javascript/reference/statements/label/index.html b/files/uk/web/javascript/reference/statements/label/index.html new file mode 100644 index 0000000000..b29fa8fb42 --- /dev/null +++ b/files/uk/web/javascript/reference/statements/label/index.html @@ -0,0 +1,182 @@ +--- +title: Мітка +slug: Web/JavaScript/Reference/Statements/label +tags: + - JavaScript +translation_of: Web/JavaScript/Reference/Statements/label +--- +<div>{{jsSidebar("Statements")}}</div> + +<p><strong>Мітка </strong>(label) може використовуватися з операторами {{jsxref("Statements/break", "break")}} та {{jsxref("Statements/continue", "continue")}}. Вона додається попереду виразу у вигляді ідентифікатора, на який можна посилатися.</p> + +<div>{{EmbedInteractiveExample("pages/js/statement-label.html")}}</div> + + + +<div class="note"> +<p><strong>Заувага:</strong> Використання помічених циклів або блоків є дуже нестандартним підходом. Зазвичай використовуються виклики функцій замість стрибків у циклах.</p> +</div> + +<h2 id="Синтаксис">Синтаксис</h2> + +<pre class="syntaxbox notranslate"><em>label</em> : + <em>statement</em> +</pre> + +<dl> + <dt><code>label</code></dt> + <dd>Будь-який ідентифікатор JavaScript, який не є зарезервованим словом.</dd> + <dt><code>statement</code></dt> + <dd>Інструкція JavaScript. Оператор <code>break</code> може використовуватися з будь-якою поміченою конструкцією, а оператор <code>continue</code> може використовуватися з поміченими циклами.</dd> +</dl> + +<h2 id="Опис">Опис</h2> + +<p>Ви можете використати мітку, щоб ідентифікувати цикл, а потім скористатись операторами <code>break</code> чи <code>continue</code>, щоб вказати, що програма має перервати чи продовжити його виконання.</p> + +<p>Зауважте, що у JavaScript <em>немає</em> оператора <code>goto</code>, ви можете використовувати мітки лише з <code>break</code> або <code>continue</code>.</p> + +<p>У <a href="/uk/docs/Web/JavaScript/Reference/Strict_mode">строгому режимі</a> не можна використовувати "<code>let</code>" в якості імені мітки. Це спричинить викидання {{jsxref("SyntaxError")}} (let є зарезервованим ідентифікатором).</p> + +<h2 id="Приклади">Приклади</h2> + +<h3 id="Використання_поміченого_continue_з_циклами_for">Використання поміченого <code>continue</code> з циклами <code>for</code></h3> + +<pre class="brush: js notranslate">var i, j; + +loop1: +for (i = 0; i < 3; i++) { //Перший цикл for помічений як "loop1" + loop2: + for (j = 0; j < 3; j++) { //Другий цикл for помічений як "loop2" + if (i === 1 && j === 1) { + continue loop1; + } + console.log('i = ' + i + ', j = ' + j); + } +} + +// Результат: +// "i = 0, j = 0" +// "i = 0, j = 1" +// "i = 0, j = 2" +// "i = 1, j = 0" +// "i = 2, j = 0" +// "i = 2, j = 1" +// "i = 2, j = 2" +// Зауважте, що пропущені як "i = 1, j = 1", так і "i = 1, j = 2" +</pre> + +<h3 id="Використання_поміченого_оператора_continue">Використання поміченого оператора <code>continue</code></h3> + +<p>Маючи масив елементів та масив тестів, цей приклад рахує кількість елементів, які пройшли усі тести.</p> + +<pre class="brush: js notranslate">var itemsPassed = 0; +var i, j; + +top: +for (i = 0; i < items.length; i++) { + for (j = 0; j < tests.length; j++) { + if (!tests[j].pass(items[i])) { + continue top; + } + } + + itemsPassed++; +}</pre> + +<h3 id="Використання_поміченого_оператора_break_з_циклами_for">Використання поміченого оператора <code>break</code> з циклами <code>for</code></h3> + +<pre class="brush: js notranslate">var i, j; + +loop1: +for (i = 0; i < 3; i++) { //Перший цикл for помічений як "loop1" + loop2: + for (j = 0; j < 3; j++) { //Другий цикл for помічений як "loop2" + if (i === 1 && j === 1) { + break loop1; + } + console.log('i = ' + i + ', j = ' + j); + } +} + +// Результат: +// "i = 0, j = 0" +// "i = 0, j = 1" +// "i = 0, j = 2" +// "i = 1, j = 0" +// Зауважте різницю з попереднім прикладом з continue</pre> + +<h3 id="Використання_поміченого_оператора_break">Використання поміченого оператора <code>break</code></h3> + +<p>Маючи масив елементів та масив тестів, цей приклад визначає, чи усі елементи пройшли усі тести.</p> + +<pre class="brush: js notranslate">var allPass = true; +var i, j; + +top: +for (i = 0; items.length; i++) + for (j = 0; j < tests.length; i++) + if (!tests[j].pass(items[i])) { + allPass = false; + break top; + }</pre> + +<h3 id="Використання_поміченого_блоку_з_оператором_break">Використання поміченого блоку з оператором <code>break</code></h3> + +<p>Ви можете використовувати мітки всередині звичайних блоків, але тільки оператор <code>break</code> може працювати з мітками не у циклах.</p> + +<pre class="brush: js notranslate">foo: { + console.log('пере'); + break foo; + console.log('ця частина не виконається'); +} +console.log('стрибнув'); + +// цей код виведе: + +// "пере" +// "стрибнув </pre> + +<h3 id="Помічені_оголошення_функцій">Помічені оголошення функцій</h3> + +<p>Починаючи з ECMAScript 2015, помічені оголошення функцій тепер стандартизовані для не строгого режиму у <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-labelled-function-declarations">додатку специфікації щодо веб-сумісності</a>.</p> + +<pre class="brush: js notranslate">L: function F() {}</pre> + +<p>Однак, у <a href="/uk/docs/Web/JavaScript/Reference/Strict_mode">строгому режимі</a> це викине помилку {{jsxref("SyntaxError")}}:</p> + +<pre class="brush: js notranslate">'use strict'; +L: function F() {} +// SyntaxError: functions cannot be labelled</pre> + +<p><a href="/uk/docs/Web/JavaScript/Reference/Statements/function*">Функції-генератори</a> також не можуть мати мітки ні у строгому, ні у звичайному режимі:</p> + +<pre class="brush: js notranslate">L: function* F() {} +// SyntaxError: generator functions cannot be labelled +</pre> + +<h2 id="Специфікації">Специфікації</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Специфікація</th> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-labelled-statements', 'Labelled statement')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> + + + +<p>{{Compat("javascript.statements.label")}}</p> + +<h2 id="Див._також">Див. також</h2> + +<ul> + <li>{{jsxref("Statements/break", "break")}}</li> + <li>{{jsxref("Statements/continue", "continue")}}</li> +</ul> |