Как пропустить или игнорировать ошибки в 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");
}