aboutsummaryrefslogtreecommitdiff
path: root/files/uk/web/javascript/reference/statements/throw/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'files/uk/web/javascript/reference/statements/throw/index.html')
-rw-r--r--files/uk/web/javascript/reference/statements/throw/index.html198
1 files changed, 198 insertions, 0 deletions
diff --git a/files/uk/web/javascript/reference/statements/throw/index.html b/files/uk/web/javascript/reference/statements/throw/index.html
new file mode 100644
index 0000000000..96b8974f40
--- /dev/null
+++ b/files/uk/web/javascript/reference/statements/throw/index.html
@@ -0,0 +1,198 @@
+---
+title: throw
+slug: Web/JavaScript/Reference/Statements/throw
+tags:
+ - JavaScript
+ - throw
+ - виняток
+translation_of: Web/JavaScript/Reference/Statements/throw
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<p><strong>Оператор</strong> <strong><code>throw</code> </strong>викидає визначений користувачем виняток. Виконання поточної функції буде зупинено (оператори після <code>throw</code> не будуть виконані), а контроль буде передано до першого блоку <a href="/uk/docs/Web/JavaScript/Reference/Statements/try...catch"><code>catch</code></a> у стеку викликів. Якщо жодного блоку <code>catch</code> не існує, виконання програми переривається.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/statement-throw.html")}}</div>
+
+
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">throw <em>expression</em>; </pre>
+
+<dl>
+ <dt><code>expression</code></dt>
+ <dd>Вираз, що викидається.</dd>
+</dl>
+
+<h2 id="Опис">Опис</h2>
+
+<p>Скористайтеся оператором <code>throw</code>, щоб викинути виняток. Коли викидаєте виняток, <code>expression</code> вказує значення винятка. Кожна з наступних команд викидає виняток:</p>
+
+<pre class="brush: js">throw 'Error2'; // генерує виняток, що має рядкове значення
+throw 42; // генерує виняток, що має значення 42
+throw true; // генерує виняток, що має значення true
+throw new Error('Required'); // генерує об'єкт помилки з повідомленням Required
+</pre>
+
+<p>Також зазначте, що на оператор <code>throw</code> впливає <a href="/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Automatic_semicolon_insertion">автоматична вставка крапки з комою (automatic semicolon insertion, ASI)</a>, оскільки між ключовим словом <code>throw</code> та виразом не дозволяється вставляти символи закінчення рядка.</p>
+
+<h2 id="Приклади">Приклади</h2>
+
+<h3 id="Викидання_обєкта">Викидання об'єкта</h3>
+
+<p>Ви можете вказати об'єкт, коли викидаєте виняток. Після цього ви можете звертатися до властивостей об'єкта у блоці <code>catch</code>. Наступний приклад створює об'єкт типу <code>UserException</code>, і далі використовує його з оператором <code>throw</code>.</p>
+
+<pre class="brush: js">function UserException(message) {
+ this.message = message;
+ this.name = 'UserException';
+}
+function getMonthName(mo) {
+ mo = mo - 1; // Припасувати номер місяця до індексу масиву (1 = Січ, 12 = Груд)
+ var months = ['Січ', 'Лют', 'Берез', 'Квіт', 'Трав', 'Черв', 'Лип',
+ 'Серп', 'Верес', 'Жовт', 'Листоп', 'Груд'];
+ if (months[mo] !== undefined) {
+ return months[mo];
+ } else {
+ throw new UserException('InvalidMonthNo');
+ }
+}
+
+try {
+ // команди до виконання
+ var myMonth = 15; // 15 не входить у визначені межі й викликає виняток
+ var monthName = getMonthName(myMonth);
+} catch (e) {
+ monthName = 'unknown';
+ console.error(e.message, e.name); // передати об'єкт винятку до обробника помилок
+}
+</pre>
+
+<h3 id="Ще_один_приклад_викидання_обєкта">Ще один приклад викидання об'єкта</h3>
+
+<p>Наступний приклад перевіряє наданий текстовий рядок на формат поштового індексу. Якщо поштовий індекс використовує неправильний формат, оператор throw викидає виняток, створюючи об'єкт типу <code>ZipCodeFormatException</code>.</p>
+
+<pre class="brush: js">/*
+ * Створює об'єкт ZipCode.
+ *
+ * Дозволені формати поштового індексу:
+ * 12345
+ * 12345-6789
+ * 123456789
+ * 12345 6789
+ *
+ * Якщо аргумент, переданий до конструктора ZipCode, не відповідає
+ * жодному з цих шаблонів, викидається виняток.
+ */
+
+function ZipCode(zip) {
+ zip = new String(zip);
+ pattern = /[0-9]{5}([- ]?[0-9]{4})?/;
+ if (pattern.test(zip)) {
+ // значення поштового індексу буде першим збігом у рядку
+ this.value = zip.match(pattern)[0];
+ this.valueOf = function() {
+ return this.value
+ };
+ this.toString = function() {
+ return String(this.value)
+ };
+ } else {
+ throw new ZipCodeFormatException(zip);
+ }
+}
+
+function ZipCodeFormatException(value) {
+ this.value = value;
+ this.message = 'не відповідає очікуваному формату поштового індексу';
+ this.toString = function() {
+ return this.value + this.message;
+ };
+}
+
+/*
+ * Це можна вставити у скрипт, який перевіряє дані адреси
+ * на відповідність формату адрес.
+ */
+
+const ZIPCODE_INVALID = -1;
+const ZIPCODE_UNKNOWN_ERROR = -2;
+
+function verifyZipCode(z) {
+ try {
+ z = new ZipCode(z);
+ } catch (e) {
+ if (e instanceof ZipCodeFormatException) {
+ return ZIPCODE_INVALID;
+ } else {
+ return ZIPCODE_UNKNOWN_ERROR;
+ }
+ }
+ return z;
+}
+
+a = verifyZipCode(95060); // повертає 95060
+b = verifyZipCode(9560); // повертає -1
+c = verifyZipCode('a'); // повертає -1
+d = verifyZipCode('95060'); // повертає 95060
+e = verifyZipCode('95060 1234'); // повертає 95060 1234
+</pre>
+
+<h3 id="Повторне_викидання_винятку">Повторне викидання винятку</h3>
+
+<p>Ви можете скористатись оператором <code>throw</code>, щоб повторно викинути виняток після того, як перехопите його. Наступний приклад перехоплює виняток з числовим значенням та повторно викидає його, якщо значення більше за 50. Повторно викинутий виняток спливає наверх до замикаючої функції або на верхній рівень, так, що користувач його бачить.</p>
+
+<pre class="brush: js">try {
+ throw n; // викидає виняток з числовим значенням
+} catch (e) {
+ if (e &lt;= 50) {
+ // команди для обробки винятків 1-50
+ } else {
+ // неможливо обробити цей виняток, тому викидаємо його повторно
+ throw e;
+ }
+}
+</pre>
+
+<h2 id="Специфікації">Специфікації</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Специфікація</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Коментар</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td>Початкове визначення. Реалізоване у JavaScript 1.4</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-12.13', 'throw statement')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-throw-statement', 'throw statement')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-throw-statement', 'throw statement')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2>
+
+
+
+<p>{{Compat("javascript.statements.throw")}}</p>
+
+<h2 id="Див._також">Див. також</h2>
+
+<ul>
+ <li><a href="/uk/docs/Web/JavaScript/Reference/Statements/try...catch"><code>try...catch</code></a></li>
+</ul>