From 218934fa2ed1c702a6d3923d2aa2cc6b43c48684 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:43:23 -0500 Subject: initial commit --- .../reference/global_objects/error/index.html | 216 +++++++++++++++++++++ 1 file changed, 216 insertions(+) create mode 100644 files/uk/web/javascript/reference/global_objects/error/index.html (limited to 'files/uk/web/javascript/reference/global_objects/error/index.html') 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 +--- +
{{JSRef}}
+ +

Об'єкти Error викидаються, коли виникає помилка виконання. Об'єкт Error також можна використовувати як базовий об'єкт для винятків, створених користувачем. Дивіться нижче стандартні вбудовані типи помилок.

+ +

Опис

+ +

Помилки виконання спричиняють створення й викидання нових об'єктів Error.

+ +

Типи помилок

+ +

Окрім загального конструктора Error, у JavaScript існують сім інших базових конструкторів помилок. Щодо обробки винятків на боці клієнта, дивіться розділ Оператори обробки винятків.

+ +
+
{{jsxref("EvalError")}}
+
Створює екземпляр помилки, що виникає під час використання глобальної функції {{jsxref("eval", "eval()")}}.
+
{{jsxref("InternalError")}} {{non-standard_inline}}
+
Створює екземпляр помилки, що виникає, коли викидається внутрішня помилка рушія JavaScript. Наприклад, "too much recursion".
+
{{jsxref("RangeError")}}
+
Створює екземпляр помилки, що виникає, коли значення чисельної змінної або параметра знаходиться поза межами дозволеного діапазону.
+
{{jsxref("ReferenceError")}}
+
Створює екземпляр помилки, що виникає при зверненні за недійсним посиланням.
+
{{jsxref("SyntaxError")}}
+
Створює екземпляр синтаксичної помилки, яка виникає під час аналізу коду у {{jsxref("eval", "eval()")}}.
+
{{jsxref("TypeError")}}
+
Створює екземпляр помилки, що виникає при використанні змінної або параметра невідповідного типу.
+
{{jsxref("URIError")}}
+
Створює екземпляр помилки, що виникає, коли до {{jsxref("encodeURI", "encodeURI()")}} або {{jsxref("decodeURI", "decodeURI()")}} передаються неправильні параметри.
+
+ +

Конструктор

+ +
+
Error()
+
Створює об'єкти Error.
+
+ +

Властивості

+ +
+
Error.prototype
+
Дозволяє додавати властивості до екземплярів Error.
+
+ +

Методи

+ +

Глобальний об'єкт Error не має власних методів, однак, він успадковує деякі методи через ланцюжок прототипів.

+ +

Нестандартні методи

+ +

{{Non-standard_Header}}

+ +
+
{{JSxRef("Error.captureStackTrace()")}} {{Non-standard_Inline}}
+
Функція V8, яка створює властивість {{JSxRef("Error.prototype.stack", "stack")}} на екземплярі Error.
+
+ +

Екземпляри Error

+ +
{{page('uk/docs/Web/JavaScript/Reference/Global_Objects/Error/prototype', 'Опис')}}
+ +

Властивості

+ +
{{page('/uk/docs/Web/JavaScript/Reference/Global_Objects/Error/prototype', 'Властивості')}}
+ +

Методи

+ +
{{page('uk/docs/Web/JavaScript/Reference/Global_Objects/Error/prototype', 'Методи')}}
+ +

Приклади

+ +

Викидання загальної помилки

+ +

Зазвичай ви створюєте об'єкт Error для того, щоб викинути його з допомогою ключового слова {{jsxref("Statements/throw", "throw")}}. Ви можете обробити помилку, використовуючи конструкцію {{jsxref("Statements/try...catch", "try...catch")}}:

+ +
try {
+  throw new Error('Ой-ой!');
+} catch (e) {
+  console.error(e.name + ': ' + e.message);
+}
+
+ +

Обробка специфічної помилки

+ +

Ви можете обробляти лише окремі типи помилок, перевіряючи тип помилки з допомогою властивості {{jsxref("Object.prototype.constructor", "constructor")}} або, якщо ви пишете для сучасних рушіїв JavaScript, ключовим словом {{jsxref("Operators/instanceof", "instanceof")}}:

+ +
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);
+  }
+  // ... і т.д.
+}
+
+ +

Користувацькі типи помилок

+ +

Ви, можливо, захочете визначити свої власні типи помилок, успадкувавши їх від Error, щоб мати можливість викидати новий об'єкт помилки через throw new MyError() та використовувати instanceof MyError для перевірки типу помилки у обробнику винятків. В результаті отримуємо більш чистий та послідовний код обробки помилок. 

+ +

Дивіться всебічну дискусію "What's a good way to extend Error in JavaScript?" на StackOverflow.

+ +

Користувацький клас помилки у ES6

+ +
+

Babel до 7-ї версії може працювати з методами класу CustomError, але тільки якщо вони оголошені через  Object.defineProperty(). Інакше старі версії Babel та інші транспілятори не зможуть коректно обробити наступний код без додаткових налаштувань.

+
+ +
+

Деякі веб-переглядачі включають конструктор CustomError у трасування стеку при використанні класів ES2015.

+
+ +
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
+}
+ +

Користувацький об'єкт помилки у ES5

+ +
+

Всі веб-переглядачі включають конструктор CustomError у трасування стеку при використанні прототипного оголошення.

+
+ +
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
+}
+ +

Специфікації

+ + + + + + + + + + +
Специфікація
{{SpecName('ESDraft', '#sec-error-objects', 'Error')}}
+ +

Сумісність з веб-переглядачами

+ +
+ + +

{{Compat("javascript.builtins.Error")}}

+
+ +

Див. також

+ + -- cgit v1.2.3-54-g00ecf