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>

        提高 DevTools 控制臺(tái)調(diào)試的 12 種方法

        共 6429字,需瀏覽 13分鐘

         ·

        2021-04-29 20:37

        作者:夜盡天明

        來(lái)源:SegmentFault 思否社區(qū)


        很多開(kāi)發(fā)人員都只是略知道一些瀏覽器 DevTool 調(diào)試的基礎(chǔ)知識(shí)。

        使用最多的 console.log() 對(duì)于在代碼運(yùn)行時(shí)輸出值非常有用,通??梢詭椭槊麇e(cuò)誤。

        但是,還有一高級(jí)的用法還有很多人不知道,所以并未得到充分利用,更快,更容易和更有用的高級(jí)的用法,這些高級(jí)的用法可用于客戶端腳本,Web 工作人員和服務(wù)工作人員。

        Node.js 和 Deno 運(yùn)行時(shí)控制臺(tái)也支持許多功能。

        1. 使用 ES6 解構(gòu)輸出變量名稱

        當(dāng)監(jiān)視多個(gè)值時(shí),日志記錄可能會(huì)變得很復(fù)雜。通常有必要添加更多信息,例如

        const x = 42;

        console.log('variableX:', variableX);
        // or
        console.log(`variableX: ${ variableX }`);

        /*
        output:
        variableX: 42
        */

        更快的選擇是使用 ES6 對(duì)象銷毀分配。這會(huì)將變量添加到具有匹配屬性名稱的對(duì)象。

        換句話說(shuō),只要地方 { and } 括號(hào)一個(gè)變量來(lái)顯示其名稱和值:

        console.log({ variableX });

        /*
        output:
        { variableX: 42 }
        */

        2. 使用適當(dāng)?shù)娜罩鞠㈩愋?/span>

        console.log() 眾所周知的最簡(jiǎn)單的方法:

        console.log('no-frills log message');

        但這不是唯一的類型。消息可以歸類為信息(與相同處理 console.log() ):

        console.info('this is an information message');

        warnings:

        console.warn('I warned you this could happen!');

        errors:

        console.error('I\'m sorry Dave, I\'m afraid I can\'do that');

        或更不重要的 debug 調(diào)試消息:

        console.debug('nothing to see here - please move along');

        console.table() 可以以更友好的格式輸出對(duì)象值:

        const obj = {
            propA: 1,
            propB: 2,
            propC: 3
          };

        console.table( obj );


        console.table() 也可以用于一維或多維數(shù)組:

        const arr1 = [
            [ 1, 2, 3 ],
            [ 4, 5, 6 ],
            [ 7, 8, 9 ]
          ];

        console.table( arr1 );


        或?qū)ο髷?shù)組:

        const arr2 = [
            { a: 1, b: 2, c: 3 },
            { a: 4, b: 5, c: 6 },
            { a: 7, b: 8, c: 9 }
          ];

        console.table( arr2 );


        其他選項(xiàng)包括:

        • console.dir( obj ) 在 JavaScript 對(duì)象中顯示屬性的交互式列表
        • console.dirxml( element ) 顯示來(lái)自指定 HTML 或 XML 節(jié)點(diǎn)的后代元素的交互式樹(shù)
        • console.clear() 清除控制臺(tái)中所有以前的消息。

        3. 過(guò)濾日志消息

        瀏覽器以適當(dāng)?shù)念伾@示日志消息,但也可以對(duì)其進(jìn)行過(guò)濾以顯示特定類型。
        單擊 控制臺(tái) 面板左上方的圖標(biāo),可打開(kāi) Chrome 的側(cè)欄:
        請(qǐng)注意,console.debug() 僅在查看 詳細(xì) 選項(xiàng)時(shí)才會(huì)顯示消息。

        4. 使用 printf-type 消息

        所有日志類型都可以使用 C 樣式的 printf消息格式,該格式定義帶有 % 指示符的模板,該指示符用于替換變量。
        例如:
        console.log(
          'The answer to %s is %d.',
          'life, the universe and everything',
          42
        );
        // The answer to life, the universe and everything is 42.

        5. 記錄樣式

        可以使用在任何消息類型的第二個(gè)參數(shù)中作為字符串傳遞的標(biāo)準(zhǔn) CSS 設(shè)置日志消息的樣式。
        %c 消息中的標(biāo)記指示樣式的應(yīng)用位置,例如
        console.log(
          '%cOK, things are really bad now!',
          `
          font-size: 2em;
          padding: 0.5em 2em;
          margin: 1em 0;
          color: yellow;
          background-color: red;
          border-radius: 50%;
          `
        );
        在 DevTools 控制臺(tái)中的結(jié)果是:

        6. 使用類似測(cè)試的斷言

        console.assert() 當(dāng)條件失敗時(shí),可以使用類似 test 的命令來(lái)輸出消息。
        可以使用條件定義斷言,然后在該條件失敗時(shí)輸出一個(gè)或多個(gè)對(duì)象,例如
        console.assert(
          life === 42,
          'life is expected to be',
          42,
          'but is set to',
          life
        );
        或者,可以使用消息和替換值:
        console.assert(
          life === 42,
          'life is expected to be %s but is set to %s',
          42,
          life
        );
        當(dāng)條件失敗時(shí),這兩個(gè)選項(xiàng)都將顯示斷言錯(cuò)誤:

        7. 運(yùn)行堆棧跟蹤

        可以使用以下命令輸出構(gòu)成當(dāng)前執(zhí)行點(diǎn)的所有函數(shù)調(diào)用的日志 console.trace()
        function callMeTwo() {
          console.trace();
          return true;
        }

        function callMeOne() {
          return callMeTwo();
        }

        const r = callMeOne();
        跟蹤顯示了每個(gè)調(diào)用的行,可以在 “控制臺(tái)” 窗格中折疊或展開(kāi)該行:

        8. 組日志消息

        可以 console.group( label ) 在開(kāi)頭和 console.groupEnd() 結(jié)尾使用來(lái)將日志消息分為命名組。
        消息組可以嵌套,折疊或展開(kāi)(console.groupCollapsed( label ) 最初顯示該組處于折疊狀態(tài)):
        // start log group
        console.group('iloop');

        for (let i = 3; i > 0; i--) {

          console.log(i);

          // start collapsed log group
          console.groupCollapsed('jloop');

          for (let j = 97; j < 100; j++) {
            console.log(j);
          }

          // end log group (jloop)
          console.groupEnd();

        }

        // end log group (iloop)
        console.groupEnd();

        9. 使用性能計(jì)時(shí)器

        該 time( label ) 命令啟動(dòng)一個(gè)計(jì)時(shí)器。timeEnd( label ) 到達(dá)關(guān)聯(lián)的命令后,將報(bào)告經(jīng)過(guò)的時(shí)間(以毫秒為單位)。
        計(jì)時(shí)器可用于評(píng)估操作的性能-比管理自己的 Date() 計(jì)算更容易,更準(zhǔn)確,例如
        // start timer
        console.time('bigloop');

        for (let i = 999999999; i > 0; i--);

        // show elapsed time
        console.timeEnd('bigloop');


        一個(gè)頁(yè)面上最多可以添加 10,000 個(gè)計(jì)時(shí)器,并且該 console.timeLog( label ) 命令將報(bào)告經(jīng)過(guò)的時(shí)間而不會(huì)停止計(jì)時(shí)器。
        一個(gè)類似的選項(xiàng)是 console.count( label ) 報(bào)告命令被調(diào)用的次數(shù)。
        console.countReset( label ) 將命名計(jì)數(shù)器重置為零。

        10. 按名稱調(diào)試和監(jiān)視功能

        DevTools Sources 面板(或 Firefox 中的 Debugger)允許您通過(guò)單擊行號(hào)來(lái)打開(kāi)文件并設(shè)置斷點(diǎn)。
        基于 Chrome 的瀏覽器還允許您通過(guò) debug( functionName ) 在控制臺(tái)中輸入來(lái)設(shè)置斷點(diǎn),例如
        debug( doSomething );
        該函數(shù)必須在全局名稱空間中可用,并且瀏覽器將在調(diào)用調(diào)試器后立即啟動(dòng)它??梢允褂?nbsp;undebug( functionName ) 或通過(guò)重新加載頁(yè)面來(lái)取消調(diào)試。
        的 monitor( functionName ) 和其相關(guān)聯(lián)的 unmonitor( functionName ) 命令被以類似的方式使用。他們沒(méi)有停止執(zhí)行,而是記錄了對(duì)函數(shù)的每次調(diào)用并顯示了傳遞的參數(shù):
        function doSomething called with arguments: "hello", 2

        11. 查找并修復(fù)事件偵聽(tīng)器

        Firefox DevTools 檢查器面板在任何附加了處理程序的 DOM 元素旁邊顯示一個(gè)事件圖標(biāo)。
        單擊該圖標(biāo)以查看功能名稱,然后單擊左側(cè)的箭頭圖標(biāo)以展開(kāi)代碼。
        另外,“在調(diào)試器中打開(kāi)” 圖標(biāo)可在 “調(diào)試器” 窗格中找到處理程序,因此你可以設(shè)置斷點(diǎn):
        Chrome 的實(shí)現(xiàn)并不理想,但是您可以通過(guò)將 DOM 節(jié)點(diǎn)傳遞給 getEventListeners() 函數(shù)來(lái)查看所有事件偵聽(tīng)器。例如,getEventListeners( $0 ) 顯示應(yīng)用于“元素”面板中當(dāng)前突出顯示的 DOM 節(jié)點(diǎn)的偵聽(tīng)器:

        12. 將屬性復(fù)制到剪貼板

        console copy() 命令可以將任何值復(fù)制到剪貼板。它可以是原始值,數(shù)組,對(duì)象或 DOM 節(jié)點(diǎn)。
        傳遞 DOM 節(jié)點(diǎn)后,copy() 將該元素及其所有子元素的 HTML 放置在剪貼板上。
        等同于右鍵單擊一個(gè)節(jié)點(diǎn),然后選擇 “復(fù)制”,然后選擇 “復(fù)制外部HTML” 。
        該命令將 copy( document.documentElement ) 復(fù)制整個(gè) HTML 文檔。可以將其粘貼到文本編輯器中,以方便閱讀標(biāo)記。

        最后

        瀏覽器 DevTools 已從基本控制臺(tái)演變?yōu)閺?fù)雜的開(kāi)發(fā)和調(diào)試環(huán)境。
        console.log() 始終會(huì)很受歡迎,但其他選項(xiàng)可能會(huì)提供更快,更輕松的方法來(lái)實(shí)現(xiàn)零錯(cuò)誤!


        點(diǎn)擊左下角閱讀原文,到 SegmentFault 思否社區(qū) 和文章作者展開(kāi)更多互動(dòng)和交流,掃描下方”二維碼“或在“公眾號(hào)后臺(tái)回復(fù)“ 入群 ”即可加入我們的技術(shù)交流群,收獲更多的技術(shù)文章~

        - END -


        瀏覽 39
        點(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>
            亚洲有码电影 | 《放荡的情欲》完整版 | 精品少妇一区二区三区免费观看 | 久久狂操 | 亚洲香蕉在线观看 | 日韩欧美在线中文网 | 国精产品一区一区二区三区mba | 嗯啊~好舒服 | 色五月在线 | 久久久久久国产精品三级玉女聊斋 |