--- title: Error slug: Web/JavaScript/Reference/Global_Objects/Error tags: - Error - JavaScript - NeedsUpdate - Reference translation_of: Web/JavaScript/Reference/Global_Objects/Error ---
Конструктор Error
создаёт объект ошибки. Экземпляры объекта Error
выбрасываются при возникновении ошибок во время выполнения. Объект Error
также может использоваться в качестве базового для пользовательских исключений. Смотрите ниже стандартные встроенные типы ошибок.
new Error([message[, fileName[, lineNumber]]])
message
{{optional_inline()}}
fileName
{{non-standard_inline}} {{optional_inline()}}
fileName
созданного объекта Error
. Значением по умолчанию является имя файла, содержащего код, вызвавший конструктор Error()
.lineNumber
{{non-standard_inline}} {{optional_inline()}}
lineNumber
созданного объекта Error
. Значением по умолчанию является номер строки, содержащей вызов конструктора Error()
.Во время выполнения кода ошибки приводят к созданию и выбрасыванию новых объектов Error
.
Данная страница документирует использование объекта Error
как самого по себе, так и при использовании в качестве функции-конструктора. Список свойств и методов, унаследованных экземплярами объекта Error
, смотрите в разделе {{jsxref("Error.prototype")}}.
Когда Error
используется как функции-- без {{jsxref("Operators/new", "new")}}, она возвращает Error
объект. Следовательно простой вызов Error
произведёт тот же результат, что и конструктор Error
объявленный через new
.
// this: const x = Error('I was created using a function call!'); // Такая же
функциональность: const y = new Error('I was constructed via the "new" keyword!');
Кроме общего конструктора Error
, в JavaScript существует ещё семь других основных конструкторов ошибок. По обработке исключений смотрите раздел Выражения обработки исключений.
Error
.Глобальный объект Error
не содержит собственных методов, однако, он наследует некоторые методы из цепочки прототипов.
Error
Обычно, вы создаёте объект Error
с намерением возбудить ошибку с помощью ключевого слова {{jsxref("Statements/throw", "throw")}}. Вы можете обработать ошибку с помощью конструкции {{jsxref("Statements/try...catch", "try...catch")}}:
try { throw new Error('Уупс!'); } catch (e) { console.log(e.name + ': ' + e.message); }
Возможно, это следует удалить вы можете обрабатывать только какой-то определённый вид ошибок, проверяя тип ошибки в свойстве {{jsxref("Object.prototype.constructor", "constructor")}} или, если вы пишете для современных движков JavaScript, с помощью ключевого слова {{jsxref("Operators/instanceof", "instanceof")}}:
try { foo.bar(); } catch (e) { if (e instanceof EvalError) { console.log(e.name + ': ' + e.message); } else if (e instanceof RangeError) { console.log(e.name + ': ' + e.message); } // ... и т.д. }
Вы можете захотеть определить свои собственные типы ошибок, унаследованные от Error
, что бы иметь возможность писать throw new MyError()
и использовать instanceof MyError
для проверки вида ошибки в обработчике исключений. Ниже продемонстрирован общий подход к выполнению этой задачи.
Предупреждение: обратите внимание, что выбрасывание MyError
будет сообщать неправильные номер строки lineNumber
и имя файла fileName
как минимум, в Firefox.
Также смотрите обсуждение «Какой способ расширения Error в JavaScript более предпочтителен?» на Stackoverflow.
// Создаём новый объект, затем через прототип делаем его наследником конструктора Error. function MyError(message) { this.name = 'MyError'; this.message = message || 'Сообщение по умолчанию'; this.stack = (new Error()).stack; } MyError.prototype = Object.create(Error.prototype); MyError.prototype.constructor = MyError; try { throw new MyError(); } catch (e) { console.log(e.name); // 'MyError' console.log(e.message); // 'Сообщение по умолчанию' } try { throw new MyError('пользовательское сообщение'); } catch (e) { console.log(e.name); // 'MyError' console.log(e.message); // 'пользовательское сообщение' }
Спецификация | Статус | Комментарии |
---|---|---|
{{SpecName('ES1')}} | {{Spec2('ES1')}} | Изначальное определение. Реализована в JavaScript 1.1. |
{{SpecName('ES5.1', '#sec-15.11', 'Error')}} | {{Spec2('ES5.1')}} | |
{{SpecName('ES6', '#sec-error-objects', 'Error')}} | {{Spec2('ES6')}} | |
{{SpecName('ESDraft', '#sec-error-objects', 'Error')}} | {{Spec2('ESDraft')}} |
{{Compat("javascript.builtins.Error")}}