Error
Конструктор Error
создаёт объект ошибки. Экземпляры объекта Error
выбрасываются при возникновении ошибок во время выполнения. Объект Error
также может использоваться в качестве базового для пользовательских исключений. Смотрите ниже стандартные встроенные типы ошибок.
Синтаксис
new Error([message[, fileName[, lineNumber]]])
Параметры
message
Необязательный-
Человеко-читаемое описание ошибки.
fileName
Non-standardНеобязательный
-
Значение свойства
fileName
созданного объектаError
. Значением по умолчанию является имя файла, содержащего код, вызвавший конструкторError()
. lineNumber
Non-standardНеобязательный
-
Значение свойства
lineNumber
созданного объектаError
. Значением по умолчанию является номер строки, содержащей вызов конструктораError()
.
Описание
Во время выполнения кода ошибки приводят к созданию и выбрасыванию новых объектов Error
.
Данная страница документирует использование объекта Error
как самого по себе, так и при использовании в качестве функции-конструктора. Список свойств и методов, унаследованных экземплярами объекта Error
, смотрите в разделе Error.prototype
(en-US).
Использование как функции
Когда Error
используется как функции-- без 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 существует ещё семь других основных конструкторов ошибок. По обработке исключений смотрите раздел Выражения обработки исключений.
EvalError
-
Создаёт экземпляр, представляющий ошибку, возникающую в глобальной функции
eval()
. InternalError
Non-standard-
Создаёт экземпляр, представляющий ошибку, возникающую при выбрасывании внутренней ошибки в движке JavaScript. К примеру, ошибки «слишком глубокая рекурсия» («too much recursion»).
RangeError
-
Создаёт экземпляр, представляющий ошибку, возникающую при выходе числовой переменной или параметра за пределы допустимого диапазона.
ReferenceError
-
Создаёт экземпляр, представляющий ошибку, возникающую при разыменовывании недопустимой ссылки.
SyntaxError
-
Создаёт экземпляр, представляющий синтаксическую ошибку, возникающую при разборе исходного кода в функции
eval()
. TypeError
-
Создаёт экземпляр, представляющий ошибку, возникающую при недопустимом типе для переменной или параметра.
URIError
-
Создаёт экземпляр, представляющий ошибку, возникающую при передаче в функции
encodeURI()
илиdecodeURI()
недопустимых параметров.
Свойства
Error.prototype
(en-US)-
Позволяет добавлять свойства в экземпляры объекта
Error
.
Методы
Глобальный объект Error
не содержит собственных методов, однако, он наследует некоторые методы из цепочки прототипов.
Экземпляры объекта Error
Свойства
Методы
Примеры
Пример: выбрасывание обычной ошибки
Обычно, вы создаёте объект Error
с намерением возбудить ошибку с помощью ключевого слова throw
. Вы можете обработать ошибку с помощью конструкции try...catch
:
try {
throw new Error('Уупс!');
} catch (e) {
console.log(e.name + ': ' + e.message);
}
Пример: обработка ошибки конкретного типа
Возможно, это следует удалить вы можете обрабатывать только какой-то определённый вид ошибок, проверяя тип ошибки в свойстве constructor
или, если вы пишете для современных движков JavaScript, с помощью ключевого слова 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); // 'пользовательское сообщение'
}
Спецификации
Specification |
---|
ECMAScript Language Specification # sec-error-objects |
Совместимость с браузерами
BCD tables only load in the browser