Вопрос по исключениям в JavaScript
По мере чтения Флэнагана на разделе с исключениями возникли вопросы.
Я не очень понял когда нужно использовать какие-то классы в исключениях, когда не нужно. В книге написано: "если имеется соответствующий блок catch", а до этого не было написано, что есть несоответствующие блоки catch. Я полагаю, catch должны быть разными, чтобы соответствовать разным исключениям, но не знаю как исключения и catch должны быть описаны, чтобы соответствовать друг другу. Предположил: var grom = {}; var ololo = {}; try { throw new grom(); } catch(ololo e){alert('ololo e');} catch(grom e){alert('grom e');} catch(e){alert('e');} Chromium выдаёт "Uncaught SyntaxError: Unexpected identifier" на первом блоке catch. Закомментирую первый - выдаёт на втором. Гуглю всякие статьи, везде используют один блок catch без указания какого-либо класса. Например catch(e) и танцуют вокруг e. Так может в JS вообще нельзя ассоциировать исключение с блоком catch по классам? |
var grom = function(){}; var ololo = function(){}; try { throw new grom(); } catch(e) { if ( e instanceof grom ) { alert('grom '+ e); } if ( e instanceof ololo ) { alert('ololo '+ e); } } |
devote,
Цитата:
Цитата:
|
Одному блоку try может соответствовать только один блок catch, не более. Он идёт непосредственно после блока try. Скорее всего это и имелось ввиду, когда писалось "соответствующий блок catch".
В скобках после ключевого слова catch должен быть ровно один идентификатор. Его можно использовать внутри блока catch для получения соответствующего исключения. Есть может бросаться несколько видов исключений, то тип исключения нужно определить внутри блока catch и в зависимости от него делать соответствующие действия, как devote показал на примере. |
Вообще, все вот эти try-catch - по сути, очень вредная штука. Они позволяют прятать ошибки => в какой-то момент спрятанное исключение приведёт к более серьёзной поломке и всё рухнет.
Для процесса тестирования их ещё можно использовать, но лишь чтобы отловить ошибку и тут же её исправить. |
Цитата:
Но отнють, try-сatch, не только для того что бы прятать ошибки, он используются в сложных приложениях с какой-либо выраженной архитектурой, где при возникновении нестандартной ситуации генерируется исключение, которое ловится try-сatch где-то уровнем выше, что позволяет корректно среагировать на эту ситуацию и выполнить в соответствии с этим необходимый код. |
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 20:18. |