Любой способ остановить Javascript от сбоев молча?

Одна вещь, которая сводит меня с ума, - это то, как Javascript терпит неудачу в разных ситуациях.

(удаленный пример, потому что он смущает точку моего вопроса)

Много раз я сталкивался с ошибкой, которая выдает сообщение об ошибке при вводе в консоль Firebug, но когда она запускается на странице script, она терпит неудачу, , даже если консоль Firebug активна и открыта

Некоторые из этих проблем могут быть пойманы Crockford JsLint, но все равно многие не будут.

Нет ли способа включить больше сообщений об ошибках в браузере?

Можете ли вы сделать это вообще, не используя среду отладчика javascript? Я считаю, что отладчики не очень помогают мне. Я обычно покрою несколько операторов console.log() и могу найти проблему через минуту. Что меня раздражает, так это то, что молчащие ошибки в Javascript могут оставаться незамеченными в течение долгого времени или появляться такими способами, которые не очевидны вообще. Это еще более неприятно, потому что при тестировании инструкции в консоли ДАЕТ ошибку, так что происходит?

У меня была такая же проблема с исключениями, кстати, кто-нибудь заметил это? Часто мои инструкции throw new не работают вообще. Но если я нахожу то же самое в консоли, он делает.

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

Ответы

Ответ 1

Я думаю, что некоторые ответы на этот вопрос неверно истолковывают вопрос. IIUC, вопрос заключается в том, что ошибка прерывается, когда этот код запускается внутри реальной веб-страницы, но OP не хочет, чтобы это было. (Предположительно для целей отладки, в основном.)

Тогда мой вопрос будет, где этот код действительно работает в контексте веб-сайта? Скорее всего, это еще что-то подавляет ошибку, прежде чем она попадет к вам. Например, некоторые библиотеки могут инстинктивно подавлять ошибки, возникающие в рамках определенных обратных вызовов (например, для XHR). Однако, если они хороши, они также имеют тенденцию предоставлять точку доступа для получения уведомления, если произошла ошибка.

Ответ 3

Если вы работаете с объектами, для которых вы не уверены, существуют ли они во время выполнения или нет, вам необходимо проверить их существование:

if (Foo && Foo.Apple) {
    // exists, do something with it
} else {
    // doesn't exist, do Plan B
}

Обратите внимание, что выражение (Foo && Foo.Apple) сначала проверит, существует ли Foo, и только если это произойдет, он проверяет, имеет ли он свойство Apple. Если это так, выполняется if-ветвь.

Если Foo не существует или если он не содержит свойство Apple, выполняется else-branch.

Ответ 4

Согласитесь с @sime Vidas, если исключение нужно обработать и не оставить безмолвным, сначала используйте логическое условие и проверьте, существует ли это значение.

if(Foo.Apple){
\\your code
}
else
{
//Foo.Apple does not exist, do some exception handling here
}