如何跳过或忽略javascript / jquery中的错误?

clj7thdc  于 2023-01-25  发布在  jQuery
关注(0)|答案(6)|浏览(572)

假设我调用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>

file2.js上存在脚本错误(或函数出错):例如,它说“函数不存在”。2因为file2.js中有错误,所以file3.js中的脚本不执行。

是否有办法确保file3.js中的脚本仍然执行?或者,是否有可能绕过或忽略file2.js中的错误?

oxiaedzo

oxiaedzo1#

可以在包含错误的代码周围使用try catch块

try{

//code that causes an error

}catch(e){

functionToHandleError(e);
}
//continue from here

但是,只有当错误是外部库的已知条件/不可避免的问题,或者只发生在错误的用户输入时,才应该这样做,而不应该使用它让程序不惜一切代价地继续运行。
避免错误的一些方法

  • 在调用函数之前检查函数是否存在
  • 在引用对象属性之前,请检查对象是否存在
  • 如果涉及用户输入,则验证输入以检查其是否为预期类型/范围等
  • 如果这是加载顺序问题,请考虑重新排序脚本,或者如果这是一个使用依赖性管理系统(如requireJS)的大型应用程序
  • 如果对象在异步请求后未定义,请记住代码不会等待异步请求,并且直到异步请求后才定义对象。2处理所提供值的代码应该在回调函数中完成,或者使用defered/promise。
  • 如果你引用的是dom元素,考虑从加载DOM时运行的函数中启动你的JS代码,比如jQuery的document.ready或者本地的window.onload。
  • 如果javascript变量声明时没有var关键字,或者附加到全局对象,则可以在声明之外的位置修改它们。javascript也没有块作用域。确保您知道变量被修改的所有位置,并尽可能限制变量的作用域。尤其要避免使用太多全局变量来保存状态。因为在没有许多空/类型检查的情况下可能难以知道当前状态。

处理错误的一些方法

  • 如果这是一个预期的问题(即如果输入可能是空的,需要不同的处理),最好事先用if语句检查它。如果不想这样做,可以使用try/catch来强制转换输入,请求新的输入,或者对给定的输入进行适当的操作。
  • 如果是意外问题(即你不知道发生了什么)一个catch块可以是一个很好的地方输出诊断信息在开发过程中,即,不要只是抓住它,让它默默地失败,输出一个消息,让您或其他开发人员知道它失败的地方,然后使用您最喜爱的浏览器的网络开发工具检查当时的值,找出发生了什么,并添加对该案例的处理来修复它。

不应该做什么

  • 把try/catch放进去,然后让程序继续运行。如果没有正确运行的代码是不必要的,就去掉它。如果它是必要的,而且没有正确运行,就修正它。
  • 使用try catches作为你的输入验证(即如果函数为null,它将抛出一个异常,我将捕获它,然后我知道函数为null).只要有可能,检查任何预期的错误.当行为不正常,你需要进入另一个代码路径或警告用户有问题时,Try/catches应该处理"异常".
jdgnovmf

jdgnovmf2#

如果您没有时间进行调试,请尝试以下操作:

function stoperror() {
   return true;
}

称之为:

window.onerror = stoperror;

功能非常简单:创建一个总是返回true的函数,然后无论何时发生错误,都调用此函数(返回true并隐藏错误)。

e4eetjau

e4eetjau3#

可以使用try和catch语句。并使用!= null条件检查是否为null

try{

}catch(e){

}
g9icjywg

g9icjywg4#

将导致错误的调用 Package 在try...catch块中:

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

balp4ylt5#

你可以通过使用这个来保存“函数未定义”

//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");
}
6qftjkof

6qftjkof6#

我建议在假设对象(包括函数)存在之前,在对象周围添加适当的空值检查,这样代码就会优雅地失败。
以下是一些想法:Javascript check if function exists

相关问题