В JS не представляется возможным проверить, действительно ли аргумент, переданный функции, имеет тип 'error' или экземпляр Error.
Например, это недопустимо:
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);
}
}
так каков наилучший способ определить, является ли аргумент экземпляром Error?
является instanceofоператором какой - либо помощи?
err(скажем) iframe, но затем передаете его родительскому окну для передачи, вы получите (err instanceof Error) === false. Это связано с тем, что у iframe и его родительского окна разные Errorпрототипы объектов. Точно так же объект, как obj = {};will, при передаче функции, выполняющейся в другом окне, yeild (obj instanceof Object)===false. (Что еще хуже, в IE, если вы сохраните ссылку на obj после того, как окно будет разрушено или перемещено, попытка вызвать прототип объекта fns like obj.hasOwnProperty()вызовет ошибки!)
catch((err)=>{if (err === ENOENT)возвращает ENOENT is not definedошибку?
err instanceof Error