Как пропустить или игнорировать ошибки в javascript / jquery?

Я полагаю, вызывая 3 файла javascript (jquery), как это:

<script type="text/javascript" src="js/file1.js"></script>
<script type="text/javascript" src="js/file2.js"></script>
<script type="text/javascript" src="js/file3.js"></script>

On file2.js есть скрипт или функция идет не так, например, вызываемая функция не существует. Последствия из-за ошибки в file2.js скрипты в файл file3.js не будет выполнен.

есть ли способ скрипта в файл file3.js все-таки казнили? Возможно обойти или проигнорировать ошибку на file2.js?

спасибо.

6 ответов


вы можете использовать блок try catch вокруг кода с ошибкой

try{

//code that causes an error

}catch(e){

functionToHandleError(e);
}
//continue from here

но вы должны делать это только в том случае, если ошибка является известным условием/неизбежной проблемой с внешней библиотекой или происходит только при плохом вводе пользователем. Вы не должны использовать его, чтобы позволить программе работать любой ценой.

некоторые способы избежать ошибок

  • проверьте, что функции существуют, прежде чем вызывать их
  • проверьте, что объект существует, прежде чем ссылаться на его свойства
  • если используется пользовательский ввод, проверьте Ввод, чтобы проверить, что это ожидаемый тип/диапазон / etc
  • если это проблема с порядком загрузки, рассмотрите возможность переупорядочивания ваших скриптов или если это более крупное приложение, использующее систему управления зависимостями, такую как requireJS
  • если объекты не определены после асинхронного запроса, помните, что код не ожидает асинхронного запроса, и он не будет определен до тех пор. Кодекс, касающийся предоставленных значения должны выполняться в функции обратного вызова или с помощью deffereds/promises.
  • если вы ссылаетесь на элементы dom, рассмотрите возможность запуска кода JS из функции, которая запускается при загрузке DOM, такой как документ jQuery.готовое или родное окно.события onload.
  • если переменные javascript объявлены без var ключевое слово или прикреплены к глобальному объекту, они могут быть изменены в местах, отличных от объявленных. Javascript также не имеет области блокировки. Убедитесь, что вы знаете все места, где изменяются ваши переменные, и попытайтесь ограничить область переменных, когда это возможно. Особенно избегайте использования слишком большого количества глобальных переменных для удержания состояния, так как может быть трудно узнать текущее состояние без многих проверок null/type.

некоторые способы обработки ошибок

  • если его ожидаемая проблема (т. е. если вход может быть пустым и требует другой обработки), в идеале проверьте его с помощью оператора if заранее. Если вы не хотите этого делать, вы можете использовать try/catch для приведения ввода, запроса нового ввода или действовать на входе, заданном как approperiate.

  • если это неожиданная проблема (т. е. вы не знаете, что происходит), блок catch может быть хорошим местом для вывода диагностической информации во время разработки. IE, не просто поймать его и пусть он терпит неудачу молча, вывести сообщение, чтобы вы или другие разработчики знали, где это не удалось, а затем использовать веб-браузер вашего любимого инструменты разработчика для проверки значений в то время, выяснить, что произошло, и добавить обработку для этого случая, чтобы исправить это.

чего не делать

  • поместите try / catch, а затем просто позвольте программе продолжать работать. Если код, который работает неправильно, не нужен, избавьтесь от него. Если это необходимо и работает неправильно, исправьте это.

  • используйте try catches в качестве проверки ввода (т. е. если функция is null он выдаст исключение, и я его поймаю,тогда я знаю, что функция null). По возможности проверяйте наличие ожидаемых ошибок. Try / catches должны обрабатывать "исключения", когда поведение необычно, и вам нужно спуститься по альтернативному пути кода или предупредить пользователя о том, что что-то не так.


когда у вас нет времени на отладку, попробуйте следующее:

function stoperror() {
   return true;
}

называем это:

window.onerror = stoperror;

функциональность очень проста: создайте функцию, которая всегда возвращает true, а затем, когда возникает ошибка, вызовите эту функцию (возврат true и подавление ошибки).


оберните вызов, который приводит к ошибке в попытке...catch блок:

try {
   callNonExistentMethod();
}
catch (e) {
   //Handle the error if you wish.
}

Я бы предложил добавить надлежащей проверки вокруг объектов(включая функции) прежде чем предположить, что они существуют,так что код будет терпеть неудачу изящно.

вот некоторые идеи: Javascript проверьте, существует ли функция


вы можете использовать операторы try и catch.И проверка на значение null с помощью != null условие

try{


}catch(e){

}

вы можете сохранить себя от "функция не определена", используя это

//Simple function that will tell if the function is defined or not
function is_function(func) {
    return typeof window[func] !== 'undefined' && $.isFunction(window[func]);
}

//usage

if (is_function("myFunction") {
    alert("myFunction defined");
} else {
    alert("myFunction not defined");
}