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);
}
Спецификации
Совместимость с браузерами
| 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 |
134 |
138 |
88 |
29.0 |
134 |
2.2 |
24.3.0
|
||||
См. также
© 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