在 JS 中,似乎无法检查传递给函数的参数实际上是“错误”类型还是错误实例。
例如,这是无效的:
typeof err === 'error'
因为只有 6 种可能的类型(以字符串的形式):
typeof 运算符将类型信息作为字符串返回。有六个可能的typeof返回值:
typeof
“数字”、“字符串”、“布尔”、“对象”、“函数”和“未定义”。
MSDN
但是,如果我有一个像这样的简单用例怎么办:
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运营商有什么帮助吗?
instanceof
您可以使用instanceof运算符(但请参阅下面的警告!)。
var myError = new Error('foo'); myError instanceof Error // true var myString = "Whatever"; myString instanceof Error // false
如果错误是在与检查发生位置不同的窗口/框架/iframe 中引发的,则上述方法将不起作用。在这种情况下,instanceof Error检查将返回 false,即使对于Error对象也是如此。在这种情况下,最简单的方法是鸭式打字。
instanceof Error
Error
if (myError && myError.stack && myError.message) { // it's an error, probably }
stack但是,如果您有包含和message属性的非错误对象,则鸭式键入可能会产生误报。
stack
message