JavaScript 异常处理
2020-08-13 16:35
1021 查看
程序异常
程序异常可分为逻辑异常和语法异常,对于初学者而言语法异常居多,随着不断的学习对语言越来越熟悉后语法异常减少逻辑异常增多。
在
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 defined at 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 type throw 42; // Number type throw true; // Boolean type throw { 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); // MyError console.log(e.message); // Default Message } try { throw new MyError("自定义异常被抛出"); } catch (e) { console.log(e.name); // MyError console.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.nam 1088 e); // MyError console.log(e.message); // Default Message } try { throw new MyError("自定义异常被抛出"); } catch (e) { console.log(e.name); // MyError console.log(e.message); // 自定义异常被抛出 } </script>
相关文章推荐
- JavaScript异常处理总结
- 10 javaScript的异常处理 try{ }catch(theException){ }
- Javascript:拦截所有AJAX调用,重点处理服务器异常
- JavaScript中try...catch和异常处理
- javascript中的异常处理
- javascript异常处理机制Exceptions
- 处理 JavaScript 异常的一个想法
- JavaScript的异常处理语句
- JavaScript 异常处理 详解
- JavaScript 异常处理 详解
- JavaScript异常错误处理
- JavaScript 异常处理Try{}catch(e){}
- javascript编程异常处理实例小结
- JavaScript可以使用try...catch来进行异常处理
- JavaScript的异常处理
- JavaScript异常处理
- 详解JavaScript中的异常处理方法
- javascript 中的异常处理
- javascript中的异常处理
- Atitit.js javascript异常处理机制与java异常的转换 多重catc hDWR 环境 .js exception process Vob7