什么时候应该在JavaScript中使用try/catch?

San*_*Lee 31 javascript try-catch

当我使用JavaScript开发普通的Web应用程序时,try/catch通常不需要该语句.JavaScript中没有检查异常,文件IO或数据库连接.

try/catch声明在JavaScript有用吗?我什么时候可以使用它?

Sae*_*ati 34

try...catch 通常鼓励使用较少的块,这不取决于您使用的语言.

造成这种情况的主要原因是catch街区的成本.另一个原因是,当您使用单个try...catch块包装多个语句时,在catch块中您无法确定主要问题是什么.

最好使用输入验证或if...else块等技术来降低发生异常(错误)的可能性.例如,当您想要使用取自用户而不是使用的数字时try...catch,您可以使用:

if (isNaN(numberVariable))
{
    alert('you should enter a valid number');
}
Run Code Online (Sandbox Code Playgroud)


par*_*ent 30

我发现try/catch/finally有用的一个场景是深度嵌套的对象,其中null可以在任何级别弹出.例如,考虑一下:

var something = one.two.three.four.five;
Run Code Online (Sandbox Code Playgroud)

要以100%的安全性执行此"获取",必须编写一些详细的代码:

if(one && one.two && one.two.three && one.two.three.four)
   something = one.two.three.four.five;
Run Code Online (Sandbox Code Playgroud)

现在想象一下变量名称是真实的和更长的,你很快就会得到一个非常难看的代码if语句.

当我不关心任何"其他"场景并且只是想要对象时,我倾向于使用try/catch/finally来简化这个:

var something;
try { something = one.two.three.four.five; }
catch { something = "default"; }
finally { doSomething(something); }
Run Code Online (Sandbox Code Playgroud)

  • @parliament 有趣的是,你说你现在对此感到畏缩,因为我最初的反应是“哇,那是天才”。但现在你可以只使用可选链接(我在咖啡脚本中喜欢的东西之一)。`let some = one?.two?. Three?.four?. Five;` 几乎完全支持,但很容易用 babel 支持 (2认同)

luo*_*v89 25

我从这里帖子中找到了这个:

你应该什么时候使用try-catch?

只要您想要隐藏用户的错误,或者您希望为用户的利益生成自定义错误,就应该使用try-catch语句.如果你还没有想到它,当你执行try-catch语句时,浏览器的常用错误处理机制将被禁用.

在构建大型应用程序时,您可能会看到可能带来的好处.在任何应用程序的流程中调试每种可能的情况通常都很耗时,并且可能无意中忽略了许多可能性.当然,通过适当的错误测试,不应该忽视任何区域.但是try-catch语句可以作为代码区域中的一个很好的后备,这些区域可能会在开发期间未预见到的异常情况下失败.

try-catch语句提供的另一个好处是它隐藏了来自无法理解它们的用户的过度技术错误消息.

使用try-catch的最佳时间是代码的某些部分,您怀疑出于无论出于何种原因而无法控制的错误.

应该何时避免尝试捕捉?

如果您知道将要发生错误,则不应使用try-catch语句,因为在这种情况下,您需要调试问题,而不是屏蔽它.try-catch语句应仅在您怀疑可能发生错误的代码段上执行,并且由于绝大多数可能的情况,您无法完全验证是否会发生错误,或者何时会发生错误.在后一种情况下,使用try-catch是合适的.

  • @FarazKelhini我没有说这是我的答案,我已经提到了答案的来源! (4认同)
  • @FarazKelhini 别担心。我不太关心选票。编码愉快! (3认同)

Que*_*tin 14

每当运行的代码可能抛出异常时使用它.请记住,您可以throw自己犯错误 - try…catch我使用的大部分内容都是为了捕捉自己的异常.


Mic*_*ski 5

外部 Javascript 库和小部件通常利用实例化错误的异常。通常需要:

try {
  var w = new Widget();
}
catch (e) {
  // widget failed
}
Run Code Online (Sandbox Code Playgroud)