执行以下操作的正确方法是什么?
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'
答案 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);
}