Цитата:
Я пока не придумал как вызвать ошибку EvalError, кроме как ручками. Но Там вроде все нормально написано. И почему "опять"? |
EvalError вызывает SyntaxError так что так вы её и не вызовите.
http://javascript.ru/forum/offtopic/...flehnagan.html |
Niar, необязатедльно SyntaxError:
try { eval('(1).replace(/a/,"")') } catch ( ex ) { console.info( ex ) } |
Я читал что eval лучше вообще не использовать
|
Niar, и кто же такое написал?
|
Да вроде где-то на этом форуме)
|
e1f,
А в каких случаях вызывается ошибка EvalError? Пример, если можно. |
Niar, почему нельзя вызвать EvalError:
try { new eval('1;') } catch ( ex ) { console.info( ex ) } Мараторий, это и Вам ответ :) пока сходу другой пример не приведу. EvalError бросается при некорректом использовании евал. new eval() -- некорректно. |
Вы бы статьи написали по типам ошибок)
|
:)
Действительно. Корректным такое использование сложно назвать. Но тогда какое можно придумать практическое применение EvalError? |
Эээ у Дэвида написано что один из вариантов использования finally если try был закончен из-за инструкции break, continue или return. Если break можно еще использовать с меткой то как c continue и return там же SyntaxError
|
Мараторий, еще можно так:
try { eval.call(document, '1') } catch ( ex ) { console.info(ex) } Практически -- не знаю, разве что действительно отлавливать некорректное использование eval. Здесь Есть дискуссия на подобную тему, вроде бы. |
Есть еще места где можно почитать об этом на русском?
|
гугл ;)
|
Я ему не верю)
Он один раз привёл меня на сайт где можно 1 000 000$ заработать и нифига. Обманул:nono: |
А можно я вас приведу пару примеров и вы мне расскажите правильно я понял алгоритм работы кода?
|
Цитата:
Цитата:
|
try { throw new Error(404) } finally { alert("Пыщь-пыщь") } try{ throw new Error(405) } catch(e){ alert(e.message) } Тут сначала исполняется finally. Так как catch нету он ищет его дальше. Однако catch принадлежит другому try и в результате ошибка. try{ throw new Error(405) try { throw new Error(404) } finally { alert("Пыщь-пыщь") } } catch(e){ alert(e.message) } Тут сразу находит 405 ошибку и в результате остальной код try не исполняется и ищется catch, и находится. try{ try { throw new Error(404) } finally { alert("Пыщь-пыщь") } } catch(e){ alert(e.message) } Тут сразу находит 404 ошибку и ищется catch. Но он находит только finally и исполняет его. Потом ищет catch на внешнем уровне и находит. try { throw new Error(404) } finally { alert("Пыщь-пыщь") throw new Error(406) } А тут finally заменяет старое исключение на новое |
Да, вроде все верно.
Однако последний пример не тривиален для понимания. |
Не понятно только как try может быть завершён continue и return
|
По последнему пункту:
finally не "заменяет" исключение, а генерирует еще одно, оно вылетает, поэтому первоначальное мы уже не можем увидеть. Чтобы увидеть, можно так: try { throw new Error(404) } catch (ex) { console.info(ex) } finally { alert("Пыщь-пыщь") throw new Error(406) } Niar, форматируйте код отступами, влом читать :) |
Учту=)
|
Цитата:
|
А всё Дэвид. Вот список причин исполнения finally если try закончен:
// 1) нормальным образом, достигнув конца блока // 2) изза инструкции break, continue или return // 3) с исключением, обработанным приведенным ранее блоком catch // 4) с неперехваченным исключением, которое продолжает свое // распространение на более высокие уровни Кстате break можно заюзать с меткой Кстате break без метки еще и в switch ошибки не даёт |
Niar,
Ну а почитать до конца религия не позволяет? Там написан пример: var i = 0, total = 0, a = [1, "str", "10", 2]; while(i < a.length) { try { if ((typeof a[i] != "number") || isNaN(a[i])) // Если это не число, continue; // переходим к следующей итерации цикла. total += a[i]; // В противном случае добавляем число к общей сумме. } finally { i++; // Всегда увеличиваем i, даже если ранее была инструкция continue. } } alert(total); // 3 |
delete
|
Цитата:
по поводу ошибок: ловятся все ошибки времени выполнения, не ловится ни одна ошибка компиляции |
Какая еще религия
|
Niar,
Не хотел никого обидеть. Просто есть такое выражение. Если вас задел, то извиняюсь. |
Да нет всё нормально.
|
Часовой пояс GMT +3, время: 21:24. |