24

我想像这样调用 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上的错误吗?

谢谢你。

4

6 回答 6

37

您可以在出现错误的代码周围使用 try catch 块

try{

//code that causes an error

}catch(e){

functionToHandleError(e);
}
//continue from here

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

避免错误的一些方法

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

处理错误的一些方法

  • 如果它是一个预期的问题(IE 如果输入可能为空并且需要不同的处理),最好事先使用 if 语句进行检查。如果您不想这样做,您可以使用 try/catch 来强制转换输入、请求新输入或根据给定的输入采取适当的行动。

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

什么不能做

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

  • 使用 try catches 作为您的输入验证(IE 如果函数为 null,它将引发异常,我会捕获它,然后我知道该函数为 null)。只要有可能,检查任何预期的错误。当行为异常时,Try/catchs 应该处理“异常”,并且您需要使用替代代码路径或提醒用户出现问题。

于 2013-04-19T03:12:36.017 回答
16

当您没有时间调试时,请尝试以下操作:

function stoperror() {
   return true;
}

叫它:

window.onerror = stoperror;

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

于 2014-09-16T17:57:29.837 回答
3

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

try {
   callNonExistentMethod();
}
catch (e) {
   //Handle the error if you wish.
}
于 2013-04-19T03:12:58.213 回答
3

您可以通过使用此功能将自己从“功能未定义”中解救出来

//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");
}
于 2015-04-23T13:16:17.077 回答
2

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

try{


}catch(e){

}
于 2013-04-19T03:13:50.517 回答
1

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

这里有一些想法: Javascript 检查函数是否存在

于 2013-04-19T03:13:01.437 回答