Що робить instanceof Error?
Оператор instanceof Error у JavaScript використовується,
щоб перевірити, чи є об'єкт екземпляром класу Error
(або його нащадків - TypeError, RangeError, ReferenceError тощо).
Коротко
obj instanceof Errorповертаєtrue, якщо об'єктobj- це помилка, створена черезError(або успадкована від нього).
Синтаксис
object instanceof ErrorПовертає:
true- якщо об'єкт є помилкою;false- якщо ні.
Приклад 1. Перевірка звичайної помилки
const err = new Error("Щось пішло не так");
console.log(err instanceof Error); // trueОб'єкт err створений через new Error(),
тому перевірка повертає true.
Приклад 2. Перевірка вбудованих типів помилок
console.log(new TypeError() instanceof Error); // true
console.log(new RangeError() instanceof Error); // true
console.log(new ReferenceError() instanceof Error); // true
console.log(new SyntaxError() instanceof Error); // trueУсі вони успадковані від Error,
тому instanceof Error повертає true для всіх стандартних помилок.
Приклад 3. Перевірка неправильного значення
console.log("Помилка" instanceof Error); // false
console.log({ message: "Помилка" } instanceof Error); // false
console.log(404 instanceof Error); // falseЦі значення не створені через Error,
тому вони не вважаються помилками, навіть якщо "схожі".
Приклад 4. Перевірка кастомних (користувацьких) помилок
class ValidationError extends Error {}
const err = new ValidationError("Невірний email");
console.log(err instanceof ValidationError); // true
console.log(err instanceof Error); // trueБудь-який клас, успадкований від Error,
також повертатиме true при перевірці instanceof Error.
Приклад 5. Перевірка перед логуванням
Це частий прийом у production-коді:
try {
throw new Error("Помилка запиту");
} catch (e) {
if (e instanceof Error) {
console.error("Помилка:", e.message);
} else {
console.error("Непередбачений виняток:", e);
}
}Так можна безпечно обробляти лише справжні помилки, а не випадково викинуті рядки чи числа.
Приклад 6. Перевірка при роботі з промісами
Promise.reject(new TypeError("Помилка")).catch(e => {
if (e instanceof Error) {
console.log("Справжня помилка:", e.name);
} else {
console.log("Щось дивне:", e);
}
});Чому це важливо
JavaScript дозволяє "викидати" будь-які значення через throw:
throw "рядок";
throw 404;
throw { message: "помилка" };Але такі значення не є екземплярами Error,
тому instanceof Error дозволяє відрізнити "нормальні" помилки від довільних даних.
Підсумок
| Значення, що перевіряється | Результат instanceof Error | Причина |
|---|---|---|
new Error() | true | екземпляр Error |
new TypeError() | true | нащадок Error |
new ValidationError() | true | користувацький Error |
"Помилка" | false | звичайний рядок |
{ message: "Помилка" } | false | просто об'єкт |
null / undefined | false | не об'єкт |
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.