Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Исключения (throw,try,catch,finally) (https://javascript.ru/forum/misc/7326-isklyucheniya-throw-try-catch-finally.html)

Niar 27.01.2010 17:44

Интересный момент что catch ловит только RangeError

Мараторий 27.01.2010 17:46

Да. похоже, что это просто Error.
Ведь можно самому сделать trow new Error().
На свои типы у IE не похоже, поскольку e.name="Error". Будь это спец тип, я думаю, было бы не просто Error.

Мараторий 27.01.2010 17:48

Цитата:

Сообщение от Niar (Сообщение 42361)
Интересный момент что catch ловит только RangeError

Что это значит? catch ловит любой Error, разве не так?

Niar 27.01.2010 17:50

то есть только ReferenceError
Вот например при SyntaxError даже если она сделана в try и есть catch то всё равно программа прерывается
То есть не если искусственно new SyntaxError а если реально синтакс. ошибку допустить.

Мараторий 27.01.2010 17:59

Если прямо в странице допущена синтактическая ошибка, то действительно код не исполняется. А вот если синтаксическую ошибку допустить в eval, то ошибка ловится как положено.
Все остальные ошибки вроде нормально ловятся.

Niar 27.01.2010 18:05

Ловятся только ошибки времени то есть ReferenceError
Кстати на сайте статьи про типы объекта Error написаны убого. Ни одного примера одна-две строки и всё.

Мараторий 27.01.2010 18:12

Немного надо дополнить последний пост.
Такой код вообще не будет исполнен:
try {
  a->(1); // синтактическая ошибка
} catch(e) {
    alert(e)
  }

Такой код будет исполнен. Код внутри eval исполнен не будет. При этом будет поймана SyntaxError.
try {
  eval("a->(1);"); // синтактическая ошибка
} catch(e) {
    alert(e)
  }

Такой код будет исполнен. Код внутри eval исполнен не будет, в том числе и внутренний try..catch. При этом будет поймана SyntaxError во внешнем catch.
try {
  eval("try { a->(1); } catch (err) { alert(err) } finally { alert('finally'); }");
} catch(e) {
    alert(e)
  }

И finally тоже исполнен в последнем примере не будет.

Мараторий 27.01.2010 18:15

Цитата:

Сообщение от Niar (Сообщение 42368)
Ловятся только ошибки времени то есть ReferenceError.

Это не так, например
try {
  new Array(-10);
} catch(e) {
    alert(e); // Ошибка RangeError
  }

Мараторий 27.01.2010 18:21

try {
  var str = "ggg";
  str();
} catch(e) {
    alert(e); // TypeError
  }

Niar 27.01.2010 18:25

Значит Дэвид опять соврал:D
про eval http://javascript.ru/EvalError


Часовой пояс GMT +3, время: 06:44.