JavaScript: Поймать не удалось при «Uncaught SyntaxError» [Chrome] - PullRequest
1 голос
/ 30 июня 2011

Может кто-нибудь объяснить мне, почему «Uncaught SyntaxError» не обрабатывается try / catch? Можно ли изящно обработать этот тип ошибки, чтобы остальная часть JS работала?

Например:

try { response.write(;); }
catch(e) { console.log(e); }

Этот код выдает «Uncaught SyntaxError: Неожиданный токен;» Ошибка браузера [Chrome] вместо перехода к улову и регистрации объекта ошибки. Вы получаете аналогичные результаты и в Firefox; выдается ошибка вместо того, чтобы обрабатывать ее с помощью catch.

Ответы [ 3 ]

5 голосов
/ 30 июня 2011

Синтаксическая ошибка не является исключением во время выполнения. Чтобы ваша программа могла генерировать и перехватывать исключения, она должна быть в состоянии работать. Для того, чтобы бежать, это должен быть JavaScript. Приведенный выше пример не является допустимым JavaScript. Интерпретатор сдается и печатает ошибку, когда видит первую недопустимую строку и даже не доходит до строки «catch».

4 голосов
/ 30 июня 2011

Ну, так как это синтаксическое исключение, это означает, что анализатору javascript не удалось проанализировать ваш код. Поскольку браузер не смог разобрать ваш код, он не может его выполнить. Он даже не знает о вашем блоке try / catch. Блок try / catch может отлавливать только исключение, выданное в результате выполнения кода в контексте блока.

3 голосов
/ 06 февраля 2015

Вы можете использовать обходной путь для этого.

try {
    Function('response.write(;);')
} catch(e) {
    console.log(e);
}

Может использоваться для определения поддержки строки шаблона es6 следующим образом:

var isEs6Template;
try {
    Function('``');
    isEs6Template = true;
} catch(e) {
    isEs6Template = false;
}

console.log('es6 template is', isEs6Template ? 'supported' : 'unsupported');
...