JavaScript为什么要 抛出异常、捕获异常呢

代码搞错了不是会自动报错吗,那throw,try catch这些存在的意义是什么?望大佬们能说清楚

阅读 2.4k
3 个回答

如果是在生产上报错呢?如果崩溃会导致数据丢失呢?

有些时候,我们知道某个地方有可能有错误(无法提前知道的,比如因第三方数据突然改动等问题),但是我们不希望因为这一问题导致整个程序不可用,所以我们要去控制异常。

错误处理是在程序逻辑中不可避免的一个环节, 甚至可以说其实绝大多数有正常业务功能的代码, 都有约70%是在处理各种异常上面

  1. 某些错误可能重试就可以解决, 捕获那种情况下的特定的异常可以让你有重试的机会. 例如网络访问环境不稳定, 有时候重试下就可以了, 提高程序整体的鲁棒性
  2. 给出正确的给用户的提示信息, 并且可以和第1点结合, 仍然举网络访问的例子, 一个合格的应用一般不可能在出现网络请求不同的时候给用户一个带着HTTP状态码的程序错误, 而要转换成一个人类友好的信息, 例如: "网络出现问题了, 请稍候重试, 如有疑问请联系客服"等等等, 而一般不应该显示" Network error, response code: 500"
  3. 错误收集和上报, 在运行中的程序工程师是不可能7x24小时盯着的, 更何况js最多的运行环境是浏览器, 用户那里出错工程师根本无法直接感知到, 这时候引入一个错误收集自动上报的机制就可以让工程师有机会更加精确的定位问题

1.生产环境是不允许有错误的 ...
如果由浏览器检测,抛出,那么会直接导致进程死掉 ...
轻一点的事件不执行,重一点的直接页面初始化失败 ...

2.通过 try catch,丢出来的报错能让开发及时定位问题
讲道理部分要求高的项目大约只有几个小时的时间给你重新发布 .
还要你重新测试什么的,通过这个快读定位问题

3.部分代码,譬如浏览器兼容性有问题的,也会用这种写法,代替 if ... else
比检测兼容性什么的方便多了,一刀切就好

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题