Подтвердить что ты не робот

Существуют ли недопустимые исключения в Javascript?

Выполняет ли какое-либо время выполнения javascript (браузеры, Node и т.д.) какие-либо исключаемые исключения? Являются ли какие-либо исключения исключения когда-либо встречающимися в среде javascript, уловимой в инструкции try/catch?

4b9b3361

Ответ 1

Если по исключениям вы подразумеваете какое-либо исключительное условие, которое разбивает ваш script, тогда все они могут вызывать нечеткие исключения, поскольку большинство синтаксических ошибок не улавливаются. Могут быть обнаружены только синтаксические ошибки из динамически оцениваемого кода (eval, new Function).

try { :( } catch(e) { } // uncatchable syntax error

Предположим, вы имеете в виду ловушку с помощью try..catch. Технически вы можете использовать событие error для исключения синтаксических ошибок из других блоков script:

<script> onerror = function (e) { return true; }; </script>
<script> :( </script>

С другой стороны, возможно, вы не считаете ошибки, которые произошли до того, как оценка станет исключением. В этом случае "исключаемые исключения" могут быть отнесены к исключениям, которые выбрасываются из других контекстов выполнения (таких как функция, вызванная с помощью setTimeout), где вы не имеете контроля над контекстом выполнения, выбрасывающим исключение. Конечно, эти исключения не нарушают поток вашей программы.

Ответ 2

Чтобы обобщить другой ответ - исключения, которые являются асинхронными, как правило, невозможно обрабатывать без "пушек ошибок", разработанных специально для их обработки, - это домены и процесс "uncaughtException" событие в node и onerror в браузера.

Самый простой способ получить такую ​​ошибку:

setTimeout(function(){
    throw "Catch me if you can!";
});

Это то, что вы видите в http.get({host:host, port:80}, console.error); в примере другого ответа.