在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的窗口被破坏或导航后仍保留对obj的引用,则尝试像调用对象原型fns一样obj.hasOwnProperty()会抛出错误!)
catch((err)=>{if (err === ENOENT)返回ENOENT is not defined错误?
err instanceof Error