Конструктор Error создаёт объект ошибки. Экземпляры объекта Error выбрасываются при возникновении ошибок во время выполнения. Объект Error также может использоваться в качестве базового для пользовательских исключений. Смотрите ниже стандартные встроенные типы ошибок.
Синтаксис
new Error([message[, fileName[, lineNumber]]])
Параметры
messageНеобязательный- Человеко-читаемое описание ошибки.
fileNameНеобязательный- Значение свойства
fileNameсозданного объектаError. Значением по умолчанию является имя файла, содержащего код, вызвавший конструкторError(). lineNumberНеобязательный- Значение свойства
lineNumberсозданного объектаError. Значением по умолчанию является номер строки, содержащей вызов конструктораError().
Описание
Во время выполения кода ошибки приводят к созданию и выбрасыванию новых объектов Error.
Данная страница документирует использование объекта Error как самого по себе, так и при использовании в качестве функции-конструктора. Список свойств и методов, унаследованых экземплярами объекта Error, смотрите в разделе Error.prototype.
Использование как функции
Когда 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- Создаёт экземпляр, представляющий ошибку, возникающую при выбрасывании внутренней ошибки в движке JavaScript. К примеру, ошибки «слишком глубокая рекурсия» («too much recursion»).
RangeError- Создаёт экземпляр, представляющий ошибку, возникающую при выходе числовой переменной или параметра за пределы допустимого диапазона.
ReferenceError- Создаёт экземпляр, представляющий ошибку, возникающую при разыменовывании недопустимой ссылки.
SyntaxError- Создаёт экземпляр, представляющий синтаксическую ошибку, возникающую при разборе исходного кода в функции
eval(). TypeError- Создаёт экземпляр, представляющий ошибку, возникающую при недопустимом типе для переменной или параметра.
URIError- Создаёт экземпляр, представляющий ошибку, возникающую при передаче в функции
encodeURI()илиdecodeURI()недопустимых параметров.
Свойства
Error.prototype- Позволяет добавлять свойства в экземпляры объекта
Error.
Методы
Глобальный объект Error не содержит собственных методов, однако, он наследует некоторые методы из цепочки прототипов.
Экземпляры объекта Error
Все экземпляры Error и экземпляры неуниверсальных ошибок наследуются от Error.prototype. Как и со всеми функциями-конструкторами, вы можете использовать прототип конструктора для добавления свойств и методов ко всем экземплярам, создаваемым этим конструктором.
Свойства
Стандартные свойства
Error.prototype.constructor- Определяет функцию, создающую прототип экземпляра ошибки.
Error.prototype.message- Сообщение ошибки.
Error.prototype.name- Название ошибки.
Расширения вендоров
Не стандартно
Эта возможность не является стандартной и стандартизировать её пока никто не собирается. Не используйте её на сайтах, смотрящих во внешний мир: она будет работать не у всех пользователей. Также могут присутствовать большие несовместимости между реализациями и её поведение может в будущем измениться.
Microsoft
Error.prototype.description- Описание ошибки. Аналогично свойству
message. Error.prototype.number- Номер ошибки.
Mozilla
Error.prototype.fileName- Путь к файлу, в котором возникла эта ошибка.
Error.prototype.lineNumber- Номер строки в файле, в котором возникла эта ошибка.
Error.prototype.columnNumber- Номер колонки в строке, на которой возникла эта ошибка.
Error.prototype.stack- Стек вызовов.
Методы
Error.prototype.toSource()- Возвращает строку, содержащую исходный код указанного объекта
Error; вы можете использовать это значение для создания нового объекта. Переопределяет методObject.prototype.toSource(). Error.prototype.toString()- Возвращает строку, представляющую указанный объект. Переопределяет метод
Object.prototype.toString().
Примеры
Пример: выбрасывание обычной ошибки
Обычно, вы создаёте объект 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); // 'пользовательское сообщение'
}
Спецификации
| Спецификация | Статус | Комментарии |
|---|---|---|
| ECMAScript 1st Edition (ECMA-262) | Стандарт | Изначальное определение. Реализована в JavaScript 1.1. |
| ECMAScript 5.1 (ECMA-262) Определение 'Error' в этой спецификации. |
Стандарт | |
| ECMAScript 2015 (6th Edition, ECMA-262) Определение 'Error' в этой спецификации. |
Стандарт | |
| ECMAScript (ECMA-262) Определение 'Error' в этой спецификации. |
Живой стандарт |
Совместимость с браузерами
BCD tables only load in the browser