用javascript中的catchall进行try / except的正确方法

时间:2018-10-18 22:48:08

标签: javascript

执行以下操作的正确方法是什么?

try {
    card.focus();
} catch(ReferenceError e) {
    console.log(e)
} catch (e) {
    console.log('damn')
}

在python中应该是:

try:
    card.focus()
except ReferenceError as e:
    print e
except:
    print 'damn'

5 个答案:

答案 0 :(得分:2)

使用关键字instanceOf来检查错误类型。

try {
  card.focus();
} catch (error) {
  if (error instanceof ReferenceError) console.log("Not defined!");
}

答案 1 :(得分:2)

您要查找的功能不是任何JavaScript标准的一部分,但在某些浏览器中只有一次可用。但是,当前浏览器中不提供该功能。

相反,the docs建议使用一个catch块,您可以在其中测试错误的类型并相应地驱动所需的行为。因此,类似:

try {
    card.focus();
} catch (e) {
    if (e instanceof ReferenceError) {
       // statements to handle ReferenceError exceptions
    } else {
       // statements to handle any unspecified exceptions
    }
}

答案 2 :(得分:1)

很遗憾,您不能这样做。最近的事情是在catch块中完成。

try {
  // something
} catch (e) {
  if (e.errorCode === 400) {
     // something
  } else if (e.errorCode === 404) {
     // something
  } ...
}

答案 3 :(得分:1)

不建议使用 instanceof 运算符,因为它会在框架和窗口之间失败,因为起源上下文中的 constructor.prototype 与测试上下文中的(<并且不同的对象永远不会=====)。

还有其他选择。

您可以获取错误对象的类,但是通常只返回“ [object Error]”:

Object.prototype.toString.call(new ReferenceError()); // [object Error]

但是,您还可以使用设置为构造函数名称的name属性,因此:

new ReferenceError().name; // ReferenceError

instanceof 更可靠。例如:

try {
  undefinedFunction();
} catch (e) {
  if (e.name == 'ReferenceError') {
    console.log(`Ooops, got a ${e.name}. :-)`);
  } else {
    console.log(`Ooops, other error: ${e.name}. :-(`);        
  }
}

答案 4 :(得分:0)

如果您有一个类,则catchs错误是您可以使用instanceof的一个实例:

try {
   card.focus();
} catch(error) {
  if(error instanceof ReferenceError)console.log(error);
  else alert("Something went wrong! "  + error);
}