javascript有什么像try catch吗?

时间:2014-01-24 15:32:39

标签: javascript

我有以下课程:

var a = $scope.option.userMap[userId].name;

当userMap中没有具有userId键的值时,此操作失败。当它尝试执行未定义的.name时会出现错误消息。

有没有一种简单的方法可以捕捉到这个错误?当错误发生时,我希望将变量a设置为“unknown”

5 个答案:

答案 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
}

了解更多信息:

http://www.w3schools.com/js/js_errors.asp

答案 4 :(得分:1)

虽然上面的回复已回答了JS是否具有try / catch功能的问题,但他们未能指出使用try / catch块来解决未定义变量的最佳做法。更好的方法是:

var userObj = $scope.option.userMap[userId];
var a = userObj ? userObj.name : undefined;