2014-01-24 66 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; 
相關問題