Какие типы ошибок обнаруживаются операторами try-catch в Javascript?
Если я напишу
try { null = foobar } catch(e) { alert( e ) };
ничего не предупреждено, кроме ReferenceError
вошел в консоль. Тем не мение,
try { barfoo = foobar } catch(e) { alert( e ) };
показывает предупреждение с ReferenceError
,
Поэтому возникает вопрос: какие типы ошибок в каком контексте попадают в операторы try-catch?
1 ответ
Итак, ваша первая строка кода неверный синтаксис JavaScript. Вот почему вы получаете: ReferenceError: Invalid left-hand side in assignment
(Вы не можете назначить переменные null
)
Ваша вторая строка имеет правильный синтаксис, но выдает: ReferenceError: foobar is not defined
,
Теперь причина, по которой вторая строка перехватывается, а первая - нет, заключается в том, что интерпретатор JavaScript выдает первую ошибку при интерпретации кода по сравнению с тем, когда он фактически его выполняет, во втором примере.
Более простое объяснение, любезно предоставлено Matt:
Это просто неверный синтаксис JavaScript против ошибок времени выполнения. Последний пойман, первый нет.
Вы можете думать об этом как о интерпретаторе JavaScript, который просматривает весь код перед его выполнением и думает , что все это правильно анализируется? Если это не так, он бросает неуловимый
Error
(будь тоSyntaxError
или жеReferenceError
). В противном случае код должен быть выполнен, и в какой-то момент вы вводите блок try/catch во время выполнения, и любые ошибки времени выполнения, выдаваемые во время его выполнения, перехватываются.