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

我想调用3个javascript(jquery)文件是这样的:

   

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

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

谢谢。

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

 try{ //code that causes an error }catch(e){ functionToHandleError(e); } //continue from here 

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

一些避免错误的方法

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

一些处理错误的方法

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

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

什么不该做

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

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

当你没有时间调试时试试这个:

 function stoperror() { return true; } 

叫它:

 window.onerror = stoperror; 

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

在try … catch块中包含导致错误的调用:

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

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

以下是一些想法: Javascript检查函数是否存在

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

 try{ }catch(e){ } 

你可以通过使用它来保存自己“function未定义”

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