aboutsummaryrefslogtreecommitdiff
path: root/files/ru/web/javascript/reference/statements/throw
diff options
context:
space:
mode:
authorPeter Bengtsson <mail@peterbe.com>2020-12-08 14:42:52 -0500
committerPeter Bengtsson <mail@peterbe.com>2020-12-08 14:42:52 -0500
commit074785cea106179cb3305637055ab0a009ca74f2 (patch)
treee6ae371cccd642aa2b67f39752a2cdf1fd4eb040 /files/ru/web/javascript/reference/statements/throw
parentda78a9e329e272dedb2400b79a3bdeebff387d47 (diff)
downloadtranslated-content-074785cea106179cb3305637055ab0a009ca74f2.tar.gz
translated-content-074785cea106179cb3305637055ab0a009ca74f2.tar.bz2
translated-content-074785cea106179cb3305637055ab0a009ca74f2.zip
initial commit
Diffstat (limited to 'files/ru/web/javascript/reference/statements/throw')
-rw-r--r--files/ru/web/javascript/reference/statements/throw/index.html240
1 files changed, 240 insertions, 0 deletions
diff --git a/files/ru/web/javascript/reference/statements/throw/index.html b/files/ru/web/javascript/reference/statements/throw/index.html
new file mode 100644
index 0000000000..7417c2f055
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/throw/index.html
@@ -0,0 +1,240 @@
+---
+title: throw
+slug: Web/JavaScript/Reference/Statements/throw
+tags:
+ - JavaScript
+ - Statement
+translation_of: Web/JavaScript/Reference/Statements/throw
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<h2 id="Основная_информация"><span class="short_text" id="result_box" lang="ru"><span class="alt-edited hps">Основная информация</span></span></h2>
+
+<p><strong>Инструкция <code>throw</code></strong> позволяет генерировать исключения, определяемые пользователем. При этом выполнение текущей функции будет остановлено (инструкции после <code>throw</code> не будут выполнены), и управление будет передано в первый блок <a href="/en-US/docs/Web/JavaScript/Reference/Statements/try...catch"><code>catch</code></a> в стеке вызовов. Если <code>catch</code> блоков среди вызванных функций нет, выполнение программы будет остановлено.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox">throw <em>выражение</em>; </pre>
+
+<dl>
+ <dt><code>выражение</code></dt>
+ <dd>Определяемое пользователем исключение.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Используйте инструкцию throw для генерирования исключения. Когда вы генерируете исключение (throw), <em>выражение</em> задает значение исключения. Каждое из следующих throw создает исключение:</p>
+
+<pre class="brush: js">throw "Error2"; // генерирует исключение, значением которого является строка
+throw 42; // генерирует исключение, значением которого является число 42
+throw true; // генерирует исключение, значением которого является логическое значение true</pre>
+
+<p>Также стоит отметить, что на инструкцию <code>throw</code> влияет <a href="/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Automatic_semicolon_insertion">автоматическая вставка точки с запятой (ASI)</a>. Поэтому не допускаются разрывы строк между инструкцией <code>throw</code> и <code>выражением</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Throw_an_object" name="Example:_Throw_an_object">Пример: Генерирование объекта в качестве исключения</h3>
+
+<p>Можно указать объект в качестве исключения. Затем можно получить ссылку на этот объект и доступ ко всем его свойствам в блоке catch. Следующий пример создает объект ошибки, который имеет тип UserException, и используется для генерации исключения.</p>
+
+<pre class="brush: js">function UserException(message) {
+ this.message = message;
+ this.name = "Исключение, определенное пользователем";
+}
+function getMonthName(mo) {
+ mo = mo-1; // Нужно скорректировать номер месяца согласно индексам массива (1=Jan, 12=Dec)
+ var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul",
+ "Aug", "Sep", "Oct", "Nov", "Dec"];
+ if (months[mo] !== undefined) {
+ return months[mo];
+ } else {
+ throw new UserException("Неверно указан номер месяца");
+ }
+}
+
+try {
+ // statements to try
+ var myMonth = 15; // 15 находится вне границ массива, что приведет к исключению
+ var monthName = getMonthName(myMonth);
+} catch (e) {
+ monthName = "неизвестен";
+ logMyErrors(e.message, e.name); // передаем исключение в обработчик ошибок
+}
+</pre>
+
+<h3 id="Example:_Another_example_of_throwing_an_object" name="Example:_Another_example_of_throwing_an_object">Пример: Другой пример генерации объекта в виде исключения</h3>
+
+<p>Следующий пример проверяет, является ли строка, переданная в функцию, почтовым индексом США. Если индекс имеет недопустимый формат, будет сгенерировано исключение посредством создания объекта, имеющего тип <code>ZipCodeFormatException</code>.</p>
+
+<pre class="brush: js">/*
+ * Создает объект ZipCode.
+ *
+ * Допустимые форматы почтового индекса:
+ * 12345
+ * 12345-6789
+ * 123456789
+ * 12345 6789
+ *
+ * Если агрумент, переданный в констуктор ZipCode не совпадает
+ * ни с одним из этих форматов, будет брошено исключение.
+ */
+
+function ZipCode(zip) {
+ zip = new String(zip);
+ var 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
+ };
+}
+
+/*
+ * Это может быть скрипт, который проверяет значение адреса
+ * для США.
+ */
+
+var ZIPCODE_INVALID = -1;
+var 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="Example:_Rethrow_an_exception" name="Example:_Rethrow_an_exception">Пример: Повторный выброс исключения</h3>
+
+<p>Можно использовать throw для повторного выброса исключения после того, как оно было поймано. В следующем примере ловится исключение с числовым значением и делается повторный выброс, если его значение больше 50.  Повторно выброшенное исключение передается далее в вызывающую функцию или до верхнего уровня, который видит пользователь.</p>
+
+<pre class="brush: js">try {
+ throw n; // бросаем исключение с числовым значением
+} catch (e) {
+ if (e &lt;= 50) {
+ // инструкции для обработки исключений со значениями в диапазоне 1-50
+ } else {
+ // необработанное исключение, делаем повторный выброс
+ throw e;
+ }
+}
+</pre>
+
+<h2 id="Спецификации"><span class="short_text" id="result_box" lang="ru"><span class="alt-edited hps">Спецификации</span></span></h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td>Initial definition.<br>
+ Implemented in 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="Поддерживаемые_браузеры"><span class="short_text" id="result_box" lang="ru"><span class="alt-edited hps">Поддерживаемые браузеры</span></span></h2>
+
+<p>{{ CompatibilityTable() }}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also"><span class="short_text" id="result_box" lang="ru"><span class="hps">Смотрите также</span></span></h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/try...catch"><code>try...catch</code></a></li>
+</ul>