У JS видається неможливим перевірити, чи аргумент, переданий функції, насправді має тип 'помилка' або примірник помилки.
Наприклад, це невірно:
typeof err === 'error'
оскільки існує лише 6 можливих типів (у вигляді рядків):
Оператор typeof повертає інформацію про тип у вигляді рядка. Існує шість можливих значень, які typeofповертаються:
"число", "рядок", "булева", "об'єкт", "функція" та "невизначено".
Але що робити, якщо у мене такий простий варіант використання:
function errorHandler(err) {
if (typeof err === 'error') {
throw err;
}
else {
console.error('Unexpectedly, no error was passed to error handler. But here is the message:',err);
}
}
тож який найкращий спосіб визначити, чи аргумент є примірником помилки?
є instanceofоператором якої - небудь допомоги?
err(скажімо) кадр iframe, але потім передасте його до батьківського вікна для передачі, ви отримаєте (err instanceof Error) === false. Це тому, що в iframe та його батьківському вікні є чіткі, різні Errorпрототипи об'єктів. Так само об'єкт, як obj = {};буде, коли передається функції, що працює в іншому вікні, yeild (obj instanceof Object)===false. (Навіть найгірше, що в IE, якщо ви зберігаєте посилання на obj після того, як його вікно буде знищене або пересунуто, намагаєтесь викликати прототип прототипу fns, як, наприклад obj.hasOwnProperty(), викине помилки!)
catch((err)=>{if (err === ENOENT)повертає ENOENT is not definedпомилку?
err instanceof Error