1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        JavaScript 異常處理

        共 3097字,需瀏覽 7分鐘

         ·

        2020-08-16 08:33

        點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”

        優(yōu)質(zhì)文章,第一時(shí)間送達(dá)

        ? 作者?|?云崖先生?

        來(lái)源 | urlify.cn/Ebqiyq

        66套java從入門到精通實(shí)戰(zhàn)課程分享


        1、程序異常

        程序異??煞譃檫壿嫯惓:驼Z(yǔ)法異常,對(duì)于初學(xué)者而言語(yǔ)法異常居多,隨著不斷的學(xué)習(xí)對(duì)語(yǔ)言越來(lái)越熟悉后語(yǔ)法異常減少邏輯異常增多。

          在JavaScript中提供了對(duì)異常進(jìn)行處理的語(yǔ)句,在適當(dāng)?shù)臅r(shí)候使用它們能夠使程序變得更加健壯。

          但是要注意不要濫用異常處理,它會(huì)使程序的可讀性變差。

        2、異常對(duì)象

        ? ??所有的異常都是對(duì)象


        ? 異常類型

          在JavaScript中,常見異常類型有以下幾種。


        3、異常捕獲??

        ? ?try catch

          使用trycatch語(yǔ)句進(jìn)行捕獲異常。

          try用于檢測(cè)可能出現(xiàn)異常的代碼塊

          catch用于處理捕捉到的異常,可指定參數(shù)獲取異常信息

          try...catch?語(yǔ)句有一個(gè)包含一條或者多條語(yǔ)句的try代碼塊,0個(gè)或1個(gè)的catch代碼塊,catch代碼塊中的語(yǔ)句會(huì)在try代碼塊中拋出異常時(shí)執(zhí)行。

          如果try代碼塊中的語(yǔ)句(或者try?代碼塊中調(diào)用的方法)一旦拋出了異常,那么執(zhí)行流程會(huì)立即進(jìn)入catch代碼塊。

          如果try代碼塊沒(méi)有拋出異常,catch代碼塊就會(huì)被跳過(guò)。

        <script>

        ????????"use strict"
        ;

        ????????try?{
        ????????????????console.log(username);
        ????????} catch?(e) { // 會(huì)捕獲異常的所有信息
        ????????????????console.log("處理了一個(gè)異常:", e);
        ????????}

        /*

        處理了一個(gè)異常: ReferenceError: username is not defined
        ????at 1.html:56

        */


        script>


        finally

        finally塊包含了在trycatch塊完成后、下面接著try...catch的語(yǔ)句之前執(zhí)行的語(yǔ)句。

          finally塊無(wú)論是否拋出異常都會(huì)執(zhí)行。如果拋出了一個(gè)異常,就算沒(méi)有異常處理,finally塊里的語(yǔ)句也會(huì)執(zhí)行。

        <script>

        ????????"use strict"
        ;

        ????????try?{
        ????????????????console.log(username);
        ????????} catch?(e) { // 會(huì)捕獲異常的所有信息
        ????????????????console.log("處理了一個(gè)異常,ID:", e);
        ????????} finally?{
        ????????????????console.log("無(wú)論有沒(méi)有異常都會(huì)執(zhí)行我");
        ????????}


        script>


        4、主動(dòng)異常

        throw

         在某些時(shí)候我們需要主動(dòng)拋出異常,使用throw語(yǔ)句拋出異常。
        <script>

        ????????"use strict"
        ;

        ????????throw?new?Error("這是一個(gè)錯(cuò)誤")

        script>


        表達(dá)式形式你可以拋出任意表達(dá)式而不是特定一種類型的表達(dá)式。下面的代碼拋出了幾個(gè)不同類型的表達(dá)式:
        <script>

        ????????"use strict"
        ;

        ????????throw?"Error2"; // String type
        ????????throw?42; // Number type
        ????????throw?true; // Boolean type
        ????????throw?{ toString: function?() { return?"I'm an object!"; } };

        script>


        5、自定義異常

        繼承Error原型對(duì)象,可配置自定義的異常。

          Error構(gòu)造函數(shù)具有message可選參數(shù),用于顯示人類可閱讀的錯(cuò)誤描述信息

        函數(shù)形式

        <script>

        ????????"use strict"
        ;

        ????????function?MyError(message) {
        ????????????????this.name = 'MyError';
        ????????????????this.message = message || 'Default Message';
        ????????????????this.stack = (new?Error()).stack;
        ????????}

        ????????Object.setPrototypeOf(MyError, Error); // 繼承Error原型對(duì)象

        ????????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>





        ??? ?




        感謝點(diǎn)贊支持下哈?

        瀏覽 52
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            豆花视频在线观看一区二区三区 | 偷情自拍网站 | 日本一区不卡 | 牛牛AV国产精品 | freeeⅹxx性欧美hd另类 | 成人免费无码激情AV片 | 国产精品乱码69一区二区三区 | 欧美成人免费一级人片100 | 91精品办公室少妇高潮 | 久久精久久 |