5

我已经忽略了异常处理足够长的时间,主要是因为我从未在 SO 上看到的片段中看到它使用它,2 年编写 javascript 并且我什至不知道 javascript 具有异常处理。其他语言看到异常处理是很常见的,异常处理对javascript来说不那么重要吗?有哪些典型场景应该始终在 javascript 中使用异常处理而不应该使用?

此规则是否也适用于 javascript?

为什么我不应该将每个块都包装在“try”-“catch”中?

4

3 回答 3

4

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

例如,有些库从第一个方开始,测试类似于:

var element;

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

if (element) {
  // use element
}    

但是用更通用的格式编写,带有isHostMethod 之类的测试。

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

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

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

于 2013-04-11T11:51:11.613 回答
1

在 C 语言中,始终检查返回码是一种很好的做法。

然后是带有异常的 C++。Java对它们的使用非常重,甚至太重(例如::Integer.parseInt即使您只想检查,如果某些东西是String,您仍然必须处理异常)。

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

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

于 2013-04-11T11:46:13.923 回答
0

如果情况是性能,异常是一个大问题。但它以非常简单的方式进行错误检测。

如果正在使用抛出异常的某人的工具,那么您应该通过try catch块运行它们。

尝试在编写 javascript 时尽量减少抛出异常

于 2013-04-11T11:25:39.857 回答