aboutsummaryrefslogtreecommitdiff
path: root/files/uk/web/javascript/reference/global_objects/error/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'files/uk/web/javascript/reference/global_objects/error/index.html')
-rw-r--r--files/uk/web/javascript/reference/global_objects/error/index.html216
1 files changed, 216 insertions, 0 deletions
diff --git a/files/uk/web/javascript/reference/global_objects/error/index.html b/files/uk/web/javascript/reference/global_objects/error/index.html
new file mode 100644
index 0000000000..9df5ca1354
--- /dev/null
+++ b/files/uk/web/javascript/reference/global_objects/error/index.html
@@ -0,0 +1,216 @@
+---
+title: Error
+slug: Web/JavaScript/Reference/Global_Objects/Error
+tags:
+ - Error
+ - JavaScript
+ - помилка
+translation_of: Web/JavaScript/Reference/Global_Objects/Error
+---
+<div>{{JSRef}}</div>
+
+<p>Об'єкти <code>Error</code> викидаються, коли виникає помилка виконання. Об'єкт <code>Error</code> також можна використовувати як базовий об'єкт для винятків, створених користувачем. Дивіться нижче стандартні вбудовані типи помилок.</p>
+
+<h2 id="Опис">Опис</h2>
+
+<p>Помилки виконання спричиняють створення й викидання нових об'єктів <code>Error</code>.</p>
+
+<h3 id="Типи_помилок">Типи помилок</h3>
+
+<p>Окрім загального конструктора <code>Error</code>, у JavaScript існують сім інших базових конструкторів помилок. Щодо обробки винятків на боці клієнта, дивіться розділ <a href="/uk/docs/Web/JavaScript/Guide/Control_flow_and_error_handling#Exception_handling_statements">Оператори обробки винятків</a>.</p>
+
+<dl>
+ <dt>{{jsxref("EvalError")}}</dt>
+ <dd>Створює екземпляр помилки, що виникає під час використання глобальної функції {{jsxref("eval", "eval()")}}.</dd>
+ <dt>{{jsxref("InternalError")}} {{non-standard_inline}}</dt>
+ <dd>Створює екземпляр помилки, що виникає, коли викидається внутрішня помилка рушія JavaScript. Наприклад, "too much recursion".</dd>
+ <dt>{{jsxref("RangeError")}}</dt>
+ <dd>Створює екземпляр помилки, що виникає, коли значення чисельної змінної або параметра знаходиться поза межами дозволеного діапазону.</dd>
+ <dt>{{jsxref("ReferenceError")}}</dt>
+ <dd>Створює екземпляр помилки, що виникає при зверненні за недійсним посиланням.</dd>
+ <dt>{{jsxref("SyntaxError")}}</dt>
+ <dd>Створює екземпляр синтаксичної помилки, яка виникає під час аналізу коду у {{jsxref("eval", "eval()")}}.</dd>
+ <dt>{{jsxref("TypeError")}}</dt>
+ <dd>Створює екземпляр помилки, що виникає при використанні змінної або параметра невідповідного типу.</dd>
+ <dt>{{jsxref("URIError")}}</dt>
+ <dd>Створює екземпляр помилки, що виникає, коли до {{jsxref("encodeURI", "encodeURI()")}} або {{jsxref("decodeURI", "decodeURI()")}} передаються неправильні параметри.</dd>
+</dl>
+
+<h2 id="Конструктор">Конструктор</h2>
+
+<dl>
+ <dt><a href="/uk/docs/Web/JavaScript/Reference/Global_Objects/Error/Error">Error()</a></dt>
+ <dd>Створює об'єкти <code>Error</code>.</dd>
+</dl>
+
+<h2 id="Властивості">Властивості</h2>
+
+<dl>
+ <dt><code>Error.prototype</code></dt>
+ <dd>Дозволяє додавати властивості до екземплярів <code>Error</code>.</dd>
+</dl>
+
+<h2 id="Методи">Методи</h2>
+
+<p>Глобальний об'єкт <code>Error</code> не має власних методів, однак, він успадковує деякі методи через ланцюжок прототипів.</p>
+
+<h3 id="Нестандартні_методи">Нестандартні методи</h3>
+
+<p>{{Non-standard_Header}}</p>
+
+<dl>
+ <dt>{{JSxRef("Error.captureStackTrace()")}} {{Non-standard_Inline}}</dt>
+ <dd>Функція <strong>V8</strong>, яка створює властивість {{JSxRef("Error.prototype.stack", "stack")}} на екземплярі Error.</dd>
+</dl>
+
+<h2 id="Екземпляри_Error">Екземпляри Error</h2>
+
+<div>{{page('uk/docs/Web/JavaScript/Reference/Global_Objects/Error/prototype', 'Опис')}}</div>
+
+<h3 id="Властивості_2">Властивості</h3>
+
+<div>{{page('/uk/docs/Web/JavaScript/Reference/Global_Objects/Error/prototype', 'Властивості')}}</div>
+
+<h3 id="Методи_2">Методи</h3>
+
+<div>{{page('uk/docs/Web/JavaScript/Reference/Global_Objects/Error/prototype', 'Методи')}}</div>
+
+<h2 id="Приклади">Приклади</h2>
+
+<h3 id="Викидання_загальної_помилки">Викидання загальної помилки</h3>
+
+<p>Зазвичай ви створюєте об'єкт <code>Error</code> для того, щоб викинути його з допомогою ключового слова {{jsxref("Statements/throw", "throw")}}. Ви можете обробити помилку, використовуючи конструкцію {{jsxref("Statements/try...catch", "try...catch")}}:</p>
+
+<pre class="brush: js">try {
+ throw new Error('Ой-ой!');
+} catch (e) {
+ console.error(e.name + ': ' + e.message);
+}
+</pre>
+
+<h3 id="Обробка_специфічної_помилки">Обробка специфічної помилки</h3>
+
+<p>Ви можете обробляти лише окремі типи помилок, перевіряючи тип помилки з допомогою властивості {{jsxref("Object.prototype.constructor", "constructor")}} або, якщо ви пишете для сучасних рушіїв JavaScript, ключовим словом {{jsxref("Operators/instanceof", "instanceof")}}:</p>
+
+<pre class="brush: js">try {
+ foo.bar();
+} catch (e) {
+ if (e instanceof EvalError) {
+ console.error(e.name + ': ' + e.message);
+ } else if (e instanceof RangeError) {
+ console.error(e.name + ': ' + e.message);
+ }
+ // ... і т.д.
+}
+</pre>
+
+<h3 id="Користувацькі_типи_помилок">Користувацькі типи помилок</h3>
+
+<p>Ви, можливо, захочете визначити свої власні типи помилок, успадкувавши їх від <code>Error</code>, щоб мати можливість викидати новий об'єкт помилки через <code>throw new MyError()</code> та використовувати <code>instanceof MyError</code> для перевірки типу помилки у обробнику винятків. В результаті отримуємо більш чистий та послідовний код обробки помилок. </p>
+
+<p>Дивіться всебічну дискусію <a href="http://stackoverflow.com/questions/1382107/whats-a-good-way-to-extend-error-in-javascript">"What's a good way to extend Error in JavaScript?"</a> на StackOverflow.</p>
+
+<h4 id="Користувацький_клас_помилки_у_ES6">Користувацький клас помилки у ES6</h4>
+
+<div class="warning">
+<p>Babel до 7-ї версії може працювати з методами класу <code>CustomError</code>, але тільки якщо вони оголошені через  <a href="/uk/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty">Object.defineProperty()</a>. Інакше старі версії Babel та інші транспілятори не зможуть коректно обробити наступний код без <a href="https://github.com/loganfsmyth/babel-plugin-transform-builtin-extend">додаткових налаштувань</a>.</p>
+</div>
+
+<div class="note">
+<p>Деякі веб-переглядачі включають конструктор <code>CustomError</code> у трасування стеку при використанні класів ES2015.</p>
+</div>
+
+<pre class="brush: js">class CustomError extends Error {
+ constructor(foo = 'bar', ...params) {
+ // Передати залишкові параметри (в тому числі параметри розробника) до батьківського конструктора
+ super(...params)
+
+  // Підтримує правильне трасування стеку в точці, де була викинута помилка (працює лише на V8)
+ if (Error.captureStackTrace) {
+  Error.captureStackTrace(this, CustomError);
+ }
+
+ this.name = 'CustomError'
+ // Користувацька інформація для налагодження
+ this.foo = foo
+  this.date = new Date()
+ }
+}
+
+try {
+ throw new CustomError('baz', 'bazMessage')
+} catch(e) {
+ console.error(e.name) //CustomError
+ console.error(e.foo) //baz
+ console.error(e.message) //bazMessage
+ console.error(e.stack) //stacktrace
+}</pre>
+
+<h4 id="Користувацький_обєкт_помилки_у_ES5">Користувацький об'єкт помилки у ES5</h4>
+
+<div class="warning">
+<p><strong>Всі</strong> веб-переглядачі включають конструктор CustomError у трасування стеку при використанні прототипного оголошення.</p>
+</div>
+
+<pre class="brush: js">function CustomError(foo, message, fileName, lineNumber) {
+ var instance = new Error(message, fileName, lineNumber);
+ instance.name = 'CustomError';
+ instance.foo = foo;
+ Object.setPrototypeOf(instance, Object.getPrototypeOf(this));
+ if (Error.captureStackTrace) {
+ Error.captureStackTrace(instance, CustomError);
+ }
+ return instance;
+}
+
+CustomError.prototype = Object.create(Error.prototype, {
+ constructor: {
+ value: Error,
+ enumerable: false,
+ writable: true,
+ configurable: true
+ }
+});
+
+if (Object.setPrototypeOf){
+ Object.setPrototypeOf(CustomError, Error);
+} else {
+ CustomError.__proto__ = Error;
+}
+
+
+try {
+ throw new CustomError('baz', 'bazMessage');
+} catch(e){
+ console.error(e.name); //CustomError
+ console.error(e.foo); //baz
+ console.error(e.message); //bazMessage
+}</pre>
+
+<h2 id="Специфікації">Специфікації</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Специфікація</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-error-objects', 'Error')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.builtins.Error")}}</p>
+</div>
+
+<h2 id="Див._також">Див. також</h2>
+
+<ul>
+ <li>{{jsxref("Statements/throw", "throw")}}</li>
+ <li>{{jsxref("Statements/try...catch", "try...catch")}}</li>
+</ul>