互联网人学习成长社群
第6期Web全栈架构师火爆报名中~
在执行JavaScript代码的时候,有些情况下会发生错误。
错误分两种,一种是程序写的逻辑不对,导致代码执行异常。例如:
对于这种错误,要修复程序。
一种是执行过程中,程序可能遇到无法预测的异常情况而报错,例如,网络连接中断,读取不存在的文件,没有操作权限等。
对于这种错误,我们需要处理它,并可能需要给用户反馈。
错误处理是程序设计时必须要考虑的问题。对于C这样贴近系统底层的语言,错误是通过错误码返回的:
通过错误码返回错误,就需要约定什么是正确的返回值,什么是错误的返回值。上面的函数约定返回表示错误。
显然,这种用错误码表示错误在编写程序时十分不便。
因此,高级语言通常都提供了更抽象的错误处理逻辑try ... catch ... finally,JavaScript也不例外。
try ... catch ... finally
使用try ... catch ... finally处理错误时,我们编写的代码如下:
运行后可以发现,输出提示类似“出错了:TypeError: Cannot read property 'length' of null”。
我们来分析一下使用try ... catch ... finally的执行流程。
当代码块被包裹的时候,就表示这部分代码执行过程中可能会发生错误,一旦发生错误,就不再继续执行后续代码,转而跳到块。包裹的代码就是错误处理代码,变量表示捕获到的错误。最后,无论有没有错误,一定会被执行。
所以,有错误发生时,执行流程像这样:
先执行的代码;
执行到出错的语句时,后续语句不再继续执行,转而执行代码;
最后执行代码。
而没有错误发生时,执行流程像这样:
先执行的代码;
因为没有出错,代码不会被执行;
最后执行代码。
最后请注意,和可以不必都出现。也就是说,语句一共有三种形式:
完整的try ... catch ... finally:
只有try ... catch,没有finally:
只有try ... finally,没有catch:
错误类型
JavaScript有一个标准的对象表示错误,还有从派生的、等错误对象。我们在处理错误时,可以通过捕获的变量访问错误对象:
使用变量是一个习惯用法,也可以以其他变量名命名,如。
抛出错误
程序也可以主动抛出一个错误,让执行流程直接跳转到块。抛出错误使用语句。
例如,下面的代码让用户输入一个数字,程序接收到的实际上是一个字符串,然后用转换为整数。当用户输入不合法的时候,我们就抛出错误:
实际上,JavaScript允许抛出任意对象,包括数字、字符串。但是,最好还是抛出一个Error对象。
最后,当我们用catch捕获错误时,一定要编写错误处理语句:
哪怕仅仅把错误打印出来,也不要什么也不干:
因为catch到错误却什么都不执行,就不知道程序执行过程中到底有没有发生错误。
处理错误时,请不要简单粗暴地用把错误显示给用户。教程的代码使用是为了便于演示。
有你想看的精彩
感谢您的阅读,如果你觉得我的公众号还不错,请多帮我推荐给你的朋友,多谢了。
前端大牛爱好者:每天一篇前端技术文章,不定时前端干货发送
领取专属 10元无门槛券
私享最新 技术干货