Javascript中的条件错误处理

Javascript中的条件错误处理,javascript,error-handling,Javascript,Error Handling,在决定是否忽略时,处理Try-Catch结构中的重新抛出错误时,唯一标识确切错误的最佳方法是什么 我找不到任何标准错误号,是否必须解析名称和消息属性 编辑:在下面的示例中,我想检查错误是否是由于listEvent上缺少一个属性造成的,该属性的键是evnt.type的值。如果这是错误的来源,我想忽略它,否则我想重新抛出它,让它冒泡 我能想到的唯一方法就是像鸭子一样键入这样的错误 try{ listEvent[evnt.type](procedure) }catch(error){

在决定是否忽略时,处理
Try-Catch
结构中的重新抛出错误时,唯一标识确切错误的最佳方法是什么

我找不到任何标准错误号,是否必须解析
名称
消息
属性

编辑:在下面的示例中,我想检查错误是否是由于listEvent上缺少一个属性造成的,该属性的键是evnt.type的值。如果这是错误的来源,我想忽略它,否则我想重新抛出它,让它冒泡

我能想到的唯一方法就是像鸭子一样键入这样的错误

try{
    listEvent[evnt.type](procedure)
}catch(error){
    if (error.message.match(evnt.type)) {
        console.log(error.name + ' ' + error.message + ' - ignored')
    } else {
        throw error
    }
}

创建自定义异常,然后使用
instanceof

function IllegalArgumentException(message) {
    this.message = message;
}
try {
    // Some code that generates exceptions
} catch (e) {    
    if (e instanceof IllegalArgumentException) {
        // Handle this
    } else if (e instanceof SomeOtherTypeOfException) {
        // Handle this
    }
}
您还希望使其扩展
错误
原型:

IllegalArgumentException.prototype = new Error();
IllegalArgumentException.prototype.constructor = Error;
然后您可以这样使用:

throw new IllegalArgumentException("Argument cannot be less than zero");
然后,您可以使用
instanceof
检查类型:

function IllegalArgumentException(message) {
    this.message = message;
}
try {
    // Some code that generates exceptions
} catch (e) {    
    if (e instanceof IllegalArgumentException) {
        // Handle this
    } else if (e instanceof SomeOtherTypeOfException) {
        // Handle this
    }
}
还可以将任何其他属性添加到异常的构造函数中

就你的例子而言,我不确定你想做什么<如果
event.type
不是
listEvent
中的属性或键,则code>listEvent[evnt.type]将返回
undefined
。通过执行以下操作,可以更好地查看是否存在
evnt.type

if (typeof listEvent[evnt.type] !== "undefined") {
   listEvent[evnt.type](procedure);
}

那么,你在寻找哪个错误呢?JS中没有“标准错误号”,每个人都有自己的东西(主要是构建
error
子类结构)@Bergi我想唯一地确定发生了哪个标准错误,这样我就可以决定如何处理它了。这样我就可以指导代码处理、接受或重新抛出它。在JS中有没有一个规范的方法可以做到这一点?或者,如我在问题中所述,我只是解析消息吗?这些是您正在抛出的自定义异常吗?@VivinPaliath否,标准错误我建议检查异常情况,而不是让它抛出。那样容易得多。请参阅我答案的第二部分。“如果event.type不是listEvent中的属性或键,则listEvent[evnt.type]将返回undefined”。可能是这样,但是listEvent[evnt.type]()-注意调用-抛出一个错误。@CoolBlue当然会。您正试图像调用函数一样调用
未定义的
值。我的意思是,在你调用它之前,最好先检查一下你是否有一处同名的房产。这样,您就不必进行检查以查看异常情况。好的,谢谢您的建议。。。但在我看来,似乎是六个一个半打另一个。我想我的问题的答案是,没有简单、可靠的方法来唯一地识别标准错误,这不是正常的做法。就个人而言,我更喜欢try-catch结构,因为它只在代码失败时执行。你的建议每次都会触发,只有在“例外”是规则的情况下才会更有效,而在我的情况下不是。干杯。不幸的是,没有办法以您想要的方式识别标准错误。我认为我的建议更好,因为您没有使用异常作为控制流。异常用于异常情况,不应用于业务逻辑。您将为异常支付的性能损失远远大于您执行的检查,特别是在退化的情况下,您使用的每个
evnt.type
都不存在于
listEvent
中。这让我觉得是一个优雅且可读的解决方案,可以满足常见需求。不知道为什么没有更多的选票!