我应该总是将代码包装在Jatch的Try Catch块中吗?

时间:2013-04-11 11:24:20

标签: javascript

我已经忽略了异常处理足够长的时间,主要是因为我从来没有看到它在我看到的片段中使用过,2年写javascript而且我甚至不知道javascript有异常处理。其他语言很常见,看到异常处理,异常处理对javascript不太重要吗?什么是一些典型的场景,应该总是在javascript中使用异常处理而不应该?

此规则是否也适用于javascript?

Why should I not wrap every block in "try"-"catch"?

3 个答案:

答案 0 :(得分:3)

javascript中最常见的策略是防御性地编写并彻底测试。

e.g。有些库从第一个方块开始,测试类似于:

var element;

if (document && document.getElementById) {
  element = document.getElementById('foo');
}

if (element) {
  // use element
}    

但是用更通用的格式编写了 isHostMethod 等测试。

仅将try..catch用作功能检测或其他防御措施不可用的最后手段。测试宿主对象有时会返回无用的结果,甚至可能会抛出错误(例如,所有XMLHttpRequest脚本都使用try..catch,因为测试IE中的支持是不确定的,所以唯一的选择就是调用它,看看会发生什么)。

轻微的脚本错误不是什么大问题,因为大多数浏览器默认情况下不会显示它们。大多数非平凡页面总是会抛出错误(包括SO),具体取决于浏览器,设置和用户的网络环境等。用户被拒绝了他们可能或可能不知道他们丢失的功能(并且实际上可能从中受益)。因此,典型的策略是使我们的页面在没有任何脚本的情况下起作用,然后添加脚本功能以增强可用性。这样,如果发生可能会阻止页面有用的错误,则始终会回退基本功能。

这种策略可能并非总是可行,但这是一个很好的起点,不应轻易放弃。

答案 1 :(得分:1)

在C中,最好始终检查返回码。

然后C ++出现异常。 Java对它们的使用非常繁重,甚至过重(例如:Integer.parseInt:即使你只想检查,如果是String,你仍然必须处理异常)。

JavaScript还有其他异常处理概念。一个好的做法是为异常处理提供回调。如果没有找到元素,jQuery选择器仍然“工作”,你只得到0元素选择器。

因此,如果您使用抛出异常的代码,则必须处理它。但是你应该避免抛出异常并通过回调支持错误处理。

答案 2 :(得分:0)

如果案例是绩效,则例外是一个大问题。但它以非常简单的方式进行错误检测。

如果使用someones工具抛出异常,那么你应该通过try catch块运行它们。

尝试在编写javascript时最小化抛出异常