2014-01-24 37 views
-4

我有以下类:javascript是否有类似try catch的东西?

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

当在中userMap没有价值有用户id的关键,就会失败。当它尝试执行没有定义的.name的错误消息时出现。

有没有简单的方法,我可以捕捉到这个错误?发生错误时,我想将变量a设置为“未知”

+7

是的,JavaScript有'try' /'catch'。 – Alnitak

+5

您是否试用过Google First? - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch –

+4

这个问题似乎是脱离主题,因为它可以通过看看该语言的文档。 – Cerbrus

回答

2

JavaScript有一些酷似try/catch语句,但为什么当你可以用它只需检查钥匙是否存在:

if (userId in $scope.option.userMap) { 

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

}else{ 

    var a = 'unknown'; 

} 
+1

非常好,除了'a'应该设置为“未知”:) – usr2564301

+1

@Jongware - 是的,这可能更好;-) – adeneo

+1

+1,顺便说一句,回答问题不问:[盲目使用'抓住'或检查您的代码的错误](http://stackoverflow.com/questions/3217294/javascript-try-catch-performance-vs-error-checking-code) – usr2564301

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

当然:

try { 
    // Live hard...dangerous code 
} catch(e) { 
    // Manage your mess 
} 

Optionall你可以添加一个finally从句,始终执行:

finally { 
    // Always executed 
} 
1

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

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