Spec-Zone.ru › JavaScript

Error.isError()

Baseline Ограниченная доступность

Эта функция не является Baseline, так как она не работает в некоторых наиболее широко используемых браузерах.

Статический метод Error.isError() определяет, является ли переданное значение Error.

Синтаксис

Error.isError(value)

Параметры

value
Значение для проверки.

Возвращаемое значение

true, если value является Error; в противном случае false.

Описание

Error.isError() проверяет, является ли переданное значение Error. Это достигается путем выполнения брендированной проверки для приватного поля, инициализированного конструктором Error(). Это тот же механизм, который используется Array.isArray(), который, в свою очередь, аналогичен механизму, используемому оператором in.

Это более надежная альтернатива instanceof Error, поскольку она позволяет избежать ложных срабатываний и ложных отрицаний:

  • Error.isError() отклоняет значения, которые не являются фактическими экземплярами Error, даже если они имеют Error.prototype в своей цепочке прототипов — instanceof Error принял бы их, так как он проверяет цепочку прототипов.
  • Error.isError() принимает объекты Error, созданные в другой среде — instanceof Error возвращает false для них, поскольку идентичность конструктора Error отличается в разных средах.

Error.isError() возвращает true для экземпляров DOMException. Это связано с тем, что, хотя DOMException не указан как реальный подкласс Error (конструктор Error не является прототипом конструктора DOMException), DOMException по-прежнему ведет себя как Error для всех целей брендированной проверки.

Примеры

Использование Error.isError()

// all following calls return true
Error.isError(new Error());
Error.isError(new TypeError());
Error.isError(new DOMException());
try {
  1 + 1n;
} catch (e) {
  console.log(Error.isError(e)); // The operation threw a TypeError, so this returns true
}

// all following calls return false
Error.isError();
Error.isError({});
Error.isError(null);
Error.isError(undefined);
Error.isError(17);
Error.isError("Error");
Error.isError(true);
Error.isError(false);
// This is not an error, because the object does not have the private field
// initialized by the Error constructor
Error.isError({ __proto__: Error.prototype });

instanceof против Error.isError()

При проверке экземпляра Error предпочтительнее Error.isError(), чем instanceof, поскольку он работает в разных средах.

const iframe = document.createElement("iframe");
document.body.appendChild(iframe);
const xError = window.frames[window.frames.length - 1].Error;
const error = new xError();

// Correctly checking for Error
Error.isError(error); // true
// The prototype of error is xError.prototype, which is a
// different object from Error.prototype
error instanceof Error; // false

Нормализация перехваченных ошибок

Вы можете использовать Error.isError() для определения того, является ли перехваченное значение ошибкой, и нормализации его в объект ошибки.

try {
  throw "Oops; this is not an Error object";
} catch (e) {
  if (!Error.isError(e)) {
    e = new Error(e);
  }
  console.error(e.message);
}

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

Specification
ECMAScript® 2027 Language Specification
# sec-error.iserror

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

Desktop Mobile Server
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
isError
134
134
138
119
18.4Возвращает false для экземпляров DOMException. См. bug 292727.
134
138
88
18.4Возвращает false для экземпляров DOMException. См. bug 292727.
29.0
134
18.4Возвращает false для экземпляров DOMException. См. bug 292727.
1.1.39Возвращает false для экземпляров DOMException. См. issue 15821.
2.2
24.3.0
24.0.0–24.3.0Возвращает false для экземпляров DOMException. См. issue 56497.

См. также

  • Polyfill of Error.isError in core-js
  • es-shims polyfill of Error.isError
  • Error

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/isError

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API