2014-01-24 2 views
-4

У меня есть следующий класс:Есть ли у javascript что-нибудь вроде try catch?

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

Это не удается, когда нет никакого значения в userMap, что имеет ключ USERID. Сообщение об ошибке появляется, когда оно пытается сделать .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/уловом, но почему использовать его, когда вы можете просто проверьте, существует ли ключ:

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

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

}else{ 

    var a = 'unknown'; 

} 
+1

Очень хорошо, кроме 'a' должно быть установлено значение« unknown »:) – usr2564301

+1

@Jongware - Да, это, наверное, лучше ;-) – adeneo

+1

+1, кстати, для ответа на вопрос не задан: [Слепо использовать' try- catch' или проверка вашего кода на наличие ошибок] (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 блок против 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 { 
    // Always executed 
} 
1

Да, есть.

Это синтаксис:

try { 
    //Run some code here 
} catch(err) { 
    //Handle errors here 
} 

Для получения дополнительной информации:

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

+2

Загрузить плагин, указанный в моем описании профиля –

1

Хотя ответы выше ответили на вопрос о том, имеет ли JS попробовать/функцию поймать, они не смогли обратите внимание на то, что нецелесообразно использовать блоки try/catch для работы с неопределенными переменными. Лучший способ сделать это:

var userObj = $scope.option.userMap[userId]; 
var a = userObj ? userObj.name : undefined; 
Смежные вопросы