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

时间:2013-04-19 03:08:28

标签: 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>

file2.js 上有脚本或函数出错,例如,被调用的函数不存在。由于 file2.js 中的错误是 file3.js 中的脚本而导致的后果不会被执行。

是否还有一种方法可以在 file3.js 中执行脚本?可以绕过或忽略 file2.js 上的错误吗?

谢谢。

6 个答案:

答案 0 :(得分:23)

您可以在代码周围使用try catch块并显示错误

try{

//code that causes an error

}catch(e){

functionToHandleError(e);
}
//continue from here

但是,如果错误是已知条件/外部库不可避免的问题,或者仅在错误的用户输入时发生,那么您应该这样做。你不应该用它来让程序不惜一切代价继续运行。

避免错误的一些方法

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

处理错误的一些方法

  • 如果是预期的问题(IE,如果输入可能为空并需要不同的处理),理想情况下事先用if语句检查它。如果您不想这样做,可以使用try / catch来转换输入,请求新输入,或者根据给定的输入操作。

  • 如果它是一个意外的问题(IE你不知道发生了什么),一个catch块可以是在开发过程中输出诊断信息的好地方。 IE,不要只是抓住它并让它静默失败,输出一条消息让你或其他开发人员知道失败的地方,然后使用你最喜欢的浏览器的web开发工具来检查当时的值,弄清楚发生了什么,并为该案例添加处理以修复它。

什么不该做

  • 将try / catch放入,然后让程序继续运行。如果不需要正确运行的代码,请删除它。如果有必要且工作不正常,请修复它。

  • 使用try catches作为输入验证(如果函数为null,则IE将抛出异常,我将捕获它,然后我知道函数为null)。尽可能检查是否存在任何预期错误。当行为异常时,Try / catches应处理“异常”,并且您需要关闭备用代码路径或警告用户出现问题。

答案 1 :(得分:9)

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

function stoperror() {
   return true;
}

称之为:

window.onerror = stoperror;

功能非常简单:创建一个始终返回true的函数,然后每当发生错误时,调用此函数(返回true并抑制错误)。

答案 2 :(得分:1)

在try ... catch块中包装导致错误的调用:

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

答案 3 :(得分:1)

我建议在对象(包括函数)周围添加适当的空值检查 在假设它们存在之前,以便代码优雅地失败。

以下是一些想法: Javascript check if function exists

答案 4 :(得分:1)

您可以使用try和catch语句。并使用!= null条件

检查null
try{


}catch(e){

}

答案 5 :(得分:1)

您可以使用此

从“功能未定义”中解脱出来
//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");
}