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 异常处理