AI智能
改变未来

JavaScript 异常处理


程序异常

  程序异常可分为逻辑异常和语法异常,对于初学者而言语法异常居多,随着不断的学习对语言越来越熟悉后语法异常减少逻辑异常增多。

  在

JavaScript

中提供了对异常进行处理的语句,在适当的时候使用它们能够使程序变得更加健壮。

  但是要注意不要滥用异常处理,它会使程序的可读性变差。

异常对象

  所有的异常都是对象

异常类型

  在

JavaScript

中,常见异常类型有以下几种。

异常类型 简述
Error
Error

是最基本的错误类型,其他的错误类型都继承自该类型。因此,

所有错误的类型共享了一组相同的属性。

这个类型的错误很少见。一般使用开发人员自定义抛出的错误

EvalError 这个错误会在使用

eval()

函数发生异常时候抛出。两种情况会出错:1.使用

new

来进行实例化 2.尝试为变量起名为

eval

,因为它是一个关键字,所以这是不被允许的

RangeError 数值超出范围,常见于

Array

操作中

ReferenceError 变量找不到
SyntaxError 语法错误
TypeError 类型错误
URIError 在使用

encodeURI

或者

decodeURI

因为URL格式不正确时,就会导致URIError错误。

异常捕获

try catch

  使用

try

与

catch

语句进行捕获异常。

  

try

用于检测可能出现异常的代码块

  catch

用于处理捕捉到的异常,可指定参数获取异常信息

  

try...catch

语句有一个包含一条或者多条语句的

try

代码块,0个或1个的

catch

代码块,

catch

代码块中的语句会在

try

代码块中抛出异常时执行。

  如果

try

代码块中的语句(或者

try

代码块中调用的方法)一旦抛出了异常,那么执行流程会立即进入

catch

代码块。

  如果

try

代码块没有抛出异常,

catch

代码块就会被跳过。

<script>\"use strict\";try {console.log(username);} catch (e) {  // 会捕获异常的所有信息console.log(\"处理了一个异常:\", e);}/*处理了一个异常: ReferenceError: username is not definedat 1.html:56*/</script>

finally

  

finally

块包含了在

try

和

catch

块完成后、下面接着

try...catch

的语句之前执行的语句。

  

finally

块无论是否抛出异常都会执行。如果抛出了一个异常,就算没有异常处理,

finally

块里的语句也会执行。

<script>\"use strict\";try {console.log(username);} catch (e) {  // 会捕获异常的所有信息console.log(\"处理了一个异常,ID:\", e);} finally {console.log(\"无论有没有异常都会执行我\");}</script>

主动异常

throw

  在某些时候我们需要主动抛出异常,使用

throw

语句抛出异常。

<script>\"use strict\";throw new Error(\"这是一个错误\")</script>

表达式形式

  你可以抛出任意表达式而不是特定一种类型的表达式。下面的代码抛出了几个不同类型的表达式:

<script>\"use strict\";throw \"Error2\";   // String typethrow 42;         // Number typethrow true;       // Boolean typethrow { toString: function () { return \"I\'m an object!\"; } };</script>

自定义异常

  继承

Error

原型对象,可配置自定义的异常。

  Error

构造函数具有

message

可选参数,用于显示人类可阅读的错误描述信息

函数形式

<script>\"use strict\";function MyError(message) {this.name = \'MyError\';this.message = message || \'Default Message\';this.stack = (new Error()).stack;}Object.setPrototypeOf(MyError, Error);  // 继承Error原型对象try {throw new MyError();} catch (e) {console.log(e.name);  // MyErrorconsole.log(e.message);  // Default Message}try {throw new MyError(\"自定义异常被抛出\");} catch (e) {console.log(e.name);  // MyErrorconsole.log(e.message);  // 自定义异常被抛出}</script>

类形式

<script>\"use strict\";class MyError extends Error {constructor(message) {super();this.name = \"MyError\";this.message = message || \'Default Message\';this.stack = (new Error()).stack;}}try {throw new MyError();} catch (e) {console.log(e.nam1088e);  // MyErrorconsole.log(e.message);  // Default Message}try {throw new MyError(\"自定义异常被抛出\");} catch (e) {console.log(e.name);  // MyErrorconsole.log(e.message);  // 自定义异常被抛出}</script>
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » JavaScript 异常处理