我有以下课程:
var a = $scope.option.userMap[userId].name;
当userMap中没有具有userId键的值时,此操作失败。当它尝试执行未定义的.name时会出现错误消息。
有没有一种简单的方法可以捕捉到这个错误?当错误发生时,我希望将变量a
设置为“unknown”
答案 0 :(得分:5)
是
try {
var a = $scope.option.userMap[userId].name;
} catch(e) {
//catch a error
} finally {
//execute always
}
关于finally
阻止vs return
声明:
function something() {
try {
return $scope.option.userMap[userId].name;
} catch(e) {
return e.message
} finally {
alert('Yohoooo!')
}
}
调用alert
函数时,您将始终看到something
。
答案 1 :(得分:2)
Javascript与try / catch完全相同,但为什么要在检查密钥是否存在时使用它:
if (userId in $scope.option.userMap) {
var a = $scope.option.userMap[userId].name;
}else{
var a = 'unknown';
}
答案 2 :(得分:1)
当然:
try {
// Live hard...dangerous code
} catch(e) {
// Manage your mess
}
Optionall你可以添加一个始终执行的finally子句:
finally {
// Always executed
}
答案 3 :(得分:1)
是的,有。
这是语法:
try {
//Run some code here
} catch(err) {
//Handle errors here
}
了解更多信息:
答案 4 :(得分:1)
虽然上面的回复已回答了JS是否具有try / catch功能的问题,但他们未能指出使用try / catch块来解决未定义变量的最佳做法。更好的方法是:
var userObj = $scope.option.userMap[userId];
var a = userObj ? userObj.name : undefined;