• JavaScript 异常处理


    程序异常

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

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

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

    异常对象

      所有的异常都是对象

    异常类型

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

    异常类型简述
    Error Error是最基本的错误类型,其他的错误类型都继承自该类型。因此,所有错误的类型共享了一组相同的属性。 这个类型的错误很少见。一般使用开发人员自定义抛出的错误
    EvalError 这个错误会在使用eval()函数发生异常时候抛出。两种情况会出错:1.使用new来进行实例化 2.尝试为变量起名为eval,因为它是一个关键字,所以这是不被允许的
    RangeError 数值超出范围,常见于Array操作中
    ReferenceError 变量找不到
    SyntaxError 语法错误
    TypeError 类型错误
    URIError 在使用encodeURI或者decodeURI因为URL格式不正确时,就会导致URIError错误。

    异常捕获

    try catch

      使用trycatch语句进行捕获异常。

      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块包含了在trycatch块完成后、下面接着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.name);  // MyError
                    console.log(e.message);  // Default Message
            }
    
    
            try {
                    throw new MyError("自定义异常被抛出");
            } catch (e) {
                    console.log(e.name);  // MyError
                    console.log(e.message);  // 自定义异常被抛出
            }
    
    </script>
    
  • 相关阅读:
    Beginning Math and Physics For Game Programmers (Wendy Stahler 著)
    The Best Books on Game Dev
    Vector Math for 3D Computer Graphics (Bradley Kjell 著)
    2019年1月
    2018年12月
    Flocks,Herds and Schools: A Distributed Behavioral Model
    2018年11月
    2018年10月
    Tomcat基本
    对比Python中_,__,xx__xx
  • 原文地址:https://www.cnblogs.com/Yunya-Cnblogs/p/13497203.html
Copyright © 2020-2023  润新知