如何跳过或忽略javascript/jquery中的错误?
我假设调用3个javascript(jquery)文件,如下所示:如何跳过或忽略javascript/jquery中的错误?,javascript,jquery,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>
<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>
在file2.js上有脚本或函数出错,例如,调用的函数不存在。由于file2.js中出现错误,因此file3.js中的脚本将不会执行
是否有办法在file3.js中编写脚本,但仍在执行?是否可以绕过或忽略文件2.js上的错误
谢谢。您可以在错误代码周围使用try-catch块
try{
//code that causes an error
}catch(e){
functionToHandleError(e);
}
//continue from here
但是,只有当错误是外部库的已知条件/不可避免的问题,或者只有在用户输入错误时才应该这样做。你不应该用它来让程序不惜一切代价继续运行
避免错误的一些方法
- 在调用函数之前,请检查函数是否存在
- 在引用对象的属性之前,请检查对象是否存在
- 如果涉及用户输入,请验证输入以检查其是否为预期类型/范围/etc <> LI>如果这是一个加载顺序问题,考虑重新排序脚本,或者这是一个更大的应用程序,使用依赖性管理系统,如Reavjs
- 如果在异步请求之后未定义对象,请记住,代码不会等待异步请求,并且在异步请求之后才会定义。处理提供的值的代码应该在回调函数中完成,或者使用不同的/承诺
- 如果引用DOM元素,请考虑在加载DOM时运行的函数中启动JS代码,如jQuery的文档。就绪或本机窗口。
- 如果javascript变量在声明时没有使用
关键字,或者附加到全局对象,则可以在声明变量以外的位置修改它们。Javascript也没有块作用域。确保您知道所有修改变量的位置,并尽可能限制变量的范围。尤其要避免使用太多的全局变量来保存状态,因为如果没有许多空/类型检查,就很难知道当前状态var
- 如果这是一个预期的问题(即如果输入可能为空并且需要不同的处理),最好事先用If语句检查它。如果您不想这样做,您可以使用try/catch来转换输入、请求新的输入,或者按照适当的方式对给定的输入进行操作
- 如果这是一个意外的问题(即你不知道发生了什么),catch块可以是在开发过程中输出诊断信息的好地方。也就是说,不要只是捕获它并让它安静地失败,输出一条消息让您或其他开发人员知道它失败的地方,然后使用您最喜欢的浏览器的web开发人员工具检查当时的值,找出发生了什么,并添加处理以修复它
- 加入try/catch,然后让程序继续运行。如果不正确运行的代码是不必要的,请将其删除。如果它是必要的,并且不能正常工作,请修复它
- 使用try-catch作为输入验证(即如果函数为null,它将抛出异常,我将捕获它,然后我知道函数为null)。只要可能,检查是否存在任何预期错误。当行为异常时,Try/catch应该处理“异常”,并且您需要使用其他代码路径或警告用户有问题
try {
callNonExistentMethod();
}
catch (e) {
//Handle the error if you wish.
}
我建议在对象(包括函数)周围添加适当的空检查 在假设它们存在之前,这样代码就会正常地失败 以下是一些想法:
您可以使用try-and-catch语句。并使用
!=空
条件
try{
}catch(e){
}
当您没有时间调试时,请尝试以下操作:
function stoperror() {
return true;
}
叫它:
window.onerror = stoperror;
功能非常简单:创建一个始终返回true的函数,然后每当发生错误时,调用此函数(返回true并抑制错误)。使用此函数可以避免“函数未定义”
//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");
}
try/catch,但实际上您应该修复潜在的问题。如果您知道有错误,但拒绝修复它们,那么为什么要包含该文件呢?由于错误,该文件的大部分可能无法正常运行。该文件的可能副本不适用于
Uncaught TypeError:无法读取未定义的属性“remove”,下面是我的代码:var rows=document.getElementsByTagName(“tr”);对于(i=0;i