小编典典

检查 JS 中的 typeof 错误

all

在 JS 中,似乎无法检查传递给函数的参数实际上是“错误”类型还是错误实例。

例如,这是无效的:

typeof err === 'error'

因为只有 6 种可能的类型(以字符串的形式):

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运营商有什么帮助吗?


阅读 222

收藏
2022-05-23

共1个答案

小编典典

您可以使用instanceof运算符(但请参阅下面的警告!)。

var myError = new Error('foo');
myError instanceof Error // true
var myString = "Whatever";
myString instanceof Error // false

如果错误是在与检查发生位置不同的窗口/框架/iframe 中引发的,则上述方法将不起作用。在这种情况下,instanceof Error检查将返回
false,即使对于Error对象也是如此。在这种情况下,最简单的方法是鸭式打字。

if (myError && myError.stack && myError.message) {
  // it's an error, probably
}

stack但是,如果您有包含和message属性的非错误对象,则鸭式键入可能会产生误报。

2022-05-23