Error

Baseline Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

* Some parts of this feature may have varying levels of support.

Экземпляры объекта Error выбрасываются при возникновении ошибок во время выполнения. Объект Error также может использоваться в качестве базового для пользовательских исключений. Смотрите ниже стандартные встроенные типы ошибок.

Описание

Во время выполнения кода ошибки приводят к созданию и выбрасыванию новых объектов Error.

Error является сериализуемым объектом, поэтому он может быть клонирован с помощью structuredClone() или передан между воркерами с использованием postMessage().

Типы ошибок

Кроме общего конструктора Error, в JavaScript существуют другие встроенные конструкторы ошибок, смотрите раздел Выражения обработки исключений.

EvalError

Создаёт экземпляр, представляющий ошибку, возникающую в глобальной функции eval().

RangeError

Создаёт экземпляр, представляющий ошибку, возникающую при выходе числовой переменной или параметра за пределы допустимого диапазона.

ReferenceError

Создаёт экземпляр, представляющий ошибку, возникающую при разыменовывании недопустимой ссылки.

SyntaxError

Создаёт экземпляр, представляющий синтаксическую ошибку, возникающую при разборе исходного кода в функции eval().

TypeError

Создаёт экземпляр, представляющий ошибку, возникающую при недопустимом типе для переменной или параметра.

URIError

Создаёт экземпляр, представляющий ошибку, возникающую при передаче в функции encodeURI() или decodeURI() недопустимых параметров.

AggregateError

Создаёт экземпляр, представляющий несколько ошибок, обёрнутых в одну. Может быть полезно, например, при работе с Promise.any().

InternalError Не стандартно

Создаёт экземпляр, представляющий ошибку, возникающую при выбрасывании внутренней ошибки в движке JavaScript. К примеру, ошибки «слишком глубокая рекурсия» («too much recursion»).

Конструктор

Error()

Создаёт новый объект Error.

Статические методы

Error.captureStackTrace() Не стандартно

Нестандартная функция V8, которая создаёт свойство stack у экземпляра Error.

Error.stackTraceLimit Не стандартно

Нестандартное числовое свойство V8, которое ограничивает количество уровней ошибок, включаемых в трассировку стека.

Error.prepareStackTrace() Не стандартно Необязательный

Нестандартная функция V8, которая (если задана в пользовательском коде) вызывается JavaScript-движком V8 для выбрасывание исключений, позволяя определять нестандартное форматирование трассировки стека.

Свойства экземпляра

Эти свойства определены в Error.prototype и есть у всех экземпляров Error.

Error.prototype.constructor

Функция-конструктор, создающая экземпляр объекта. Для экземпляров Error начальным значением является конструктор Error.

Error.prototype.name

Представляет название типа ошибки. Начальным значением Error.prototype.name является "Error". Подклассы (например, TypeError и SyntaxError) имеют собственные значения свойства name.

Error.prototype.stack Не стандартно

Нестандартное свойство, содержащее трассировку стека.

Эти свойства являются собственными свойствами каждого экземпляра Error.

cause

Нестандартное свойство Mozilla, определяющее номер символа в строке, в которой возникла ошибка.

Причина возникновения текущей ошибки — обычно это другая обнаруженная ошибка. Для созданных пользователем объектов Error это значение свойства cause второго аргумента конструктора.

fileName Не стандартно

Нестандартное свойство Mozilla, определяющее путь к файлу, в котором возникла ошибка.

lineNumber Не стандартно

Нестандартное свойство Mozilla, определяющее номер строки в файле, где возникла ошибка.

message

Сообщение об ошибке. Для созданных пользователем объектов Error это строка, передаваемая в качестве первого аргумента конструктора.

Методы экземпляра

Error.prototype.toString()

Возвращает строку, представляющую указанный объект. Переопределяет метод Object.prototype.toString().

Примеры

Выбрасывание обычной ошибки

Обычно, вы создаёте объект Error с намерением возбудить ошибку с помощью ключевого слова throw. Вы можете обработать ошибку с помощью конструкции try...catch:

js
try {
  throw new Error("Ой!");
} catch (e) {
  console.error(`${e.name}: ${e.message}`);
}

Обработка ошибки конкретного типа

Для обработки только определённых типов ошибок можно делать проверку типа с помощью ключевого слова instanceof:

js
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}`);
  }
  // и так далее
  else {
    // Если ни один из типов не совпал, то оставляем ошибку необработанной
    throw e;
  }
}

Пользовательские типы ошибок

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

Также смотрите обсуждение «Какой способ расширения Error в JavaScript более предпочтителен?» на StackOverflow.

Предупреждение: Встроенные подклассы не могут быть надёжно преобразованы в ES6 код, потому что нет возможности создать базовый класс со специфичным new.target без Reflect.construct(). Требуется дополнительная конфигурация или ручной вызов Object.setPrototypeOf(this, CustomError.prototype) в конце конструктора, иначе создаваемый экземпляр не будет экземпляром CustomError. Смотрите TypeScript FAQ для получения дополнительной информации.

Примечание: Некоторые браузеры включают конструктор CustomError в трассировку стека при использовании классов ES2015.

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

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

Specification
ECMAScript® 2025 Language Specification
# sec-error-objects

Совместимость с браузерами

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
Error
Error() constructor
fileName parameter
Non-standard
lineNumber parameter
Non-standard
options.cause parameter
captureStackTrace
Non-standard
cause
Cause is displayed in console
Non-standard
columnNumber
Non-standard
fileName
Non-standard
lineNumber
Non-standard
message
name
Error is serializable
stack
Non-standard
stackTraceLimit
Non-standard
toString

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support
Non-standard. Check cross-browser support before using.
See implementation notes.
User must explicitly enable this feature.

Смотрите также