Конструктор 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
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.