<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

        靈活使用console讓js調(diào)試更簡單的方法步驟

        來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 21:58:07
        文檔

        靈活使用console讓js調(diào)試更簡單的方法步驟

        靈活使用console讓js調(diào)試更簡單的方法步驟:Web開發(fā)最常用的高度就是 console.log ,雖然 console.log 占有一席之地,但很多人并沒有意識到 console 本身除了基本 log 方法之外還有很多其他方法。 適當(dāng)使用這些方法可以使調(diào)試更容易,更快速,更直觀。 console.log() 在console.l
        推薦度:
        導(dǎo)讀靈活使用console讓js調(diào)試更簡單的方法步驟:Web開發(fā)最常用的高度就是 console.log ,雖然 console.log 占有一席之地,但很多人并沒有意識到 console 本身除了基本 log 方法之外還有很多其他方法。 適當(dāng)使用這些方法可以使調(diào)試更容易,更快速,更直觀。 console.log() 在console.l

        常見的占位符 %o (這是字母o,不是0),它接受對象,%s 接受字符串,%d 表示小數(shù)或整數(shù)。

        另一個有趣的是 %c,這可能與你所想不太相同,它實際上是CSS值的占位符。使用%c占位符時,對應(yīng)的后面的參數(shù)必須是CSS語句,用來對輸出內(nèi)容進行CSS渲染。常見的輸出方式有兩種:文字樣式、圖片輸出

        console.log('I am a %cbutton', 'color: white; background-color: orange; padding: 2px 5px; border-radius: 2px');

        它并不優(yōu)雅,也不是特別有用。當(dāng)然,這并不是一個真正的按鈕。

        它有用嗎? 恩恩恩。

        console.dir()

        在大多數(shù)情況下,console.dir() 的函數(shù)非常類似于 log(),盡管它看起來略有不同。

        下拉小箭頭將顯示與上面相同的對象詳細信息,這也可以從console.log 版本中看到。當(dāng)你查看元素的結(jié)構(gòu)時候,你會發(fā)現(xiàn)它們之間的差異更大,也更有趣。

        let element = document.getElementById('2x-container');

        使用 console.log 查看:

        打開了一些元素,這清楚地顯示了 DOM,我們可以在其中導(dǎo)航。但是console.dir(element)給出了更加方便查看 DOM 結(jié)構(gòu)的輸出:

        這是一種更客觀地看待元素的方式。有時候,這可能是您真正想要的,更像是檢查元素。

        console.warn()

        可能是最明顯的直接替換 log(),你可以以完全相同的方式使用 console.warn()。 唯一真正的區(qū)別是輸出字的顏色是黃色的。 具體來說,輸出處于警告級別而不是信息級別,因此瀏覽器將稍微區(qū)別對待它。 這具有使其在雜亂輸出中更明顯的效果。

        不過,還有一個更大的優(yōu)勢,因為輸出是警告而不是信息,所以你可以過濾掉所有console.log并僅保留console.warn。 這對于偶爾會在瀏覽器中輸出大量無用廢話的應(yīng)用程序尤其有用。 清除一些無用的信息可以讓你更輕松地看到你想要的輸出。

        console.table()

        令人驚訝的是,這并不是更為人所知,但是 console.table() 函數(shù)旨在以一種比僅僅轉(zhuǎn)出原始對象數(shù)組更整潔的方式顯示表格數(shù)據(jù)。

        例如,這里有一個數(shù)據(jù)列表。

        const data = [{
         id: "7cb1-e041b126-f3b8",
         seller: "WAL0412",
         buyer: "WAL3023",
         price: 203450,
         time: 1539688433
        },
        {
         id: "1d4c-31f8f14b-1571",
         seller: "WAL0452",
         buyer: "WAL3023",
         price: 348299,
         time: 1539688433
        },
        {
         id: "b12c-b3adf58f-809f",
         seller: "WAL0012",
         buyer: "WAL2025",
         price: 59240,
         time: 1539688433
        }];

        如果我們使用 console.log 來輸出上面的內(nèi)容,我們會得到一些非常無用的輸出:

        ▶ (3) [{…}, {…}, {…}]

        點擊這個小箭頭可以展開看到對象的內(nèi)容,但是,它并不是我們想要的“一目了然”。

        但是 console.table(data) 的輸出要有用得多。

        第二個可選參數(shù)是所需列的列表。顯然,所有列都是默認值,但我們也可以這樣做:

        > console.table(data, ["id", "price"]);

        這里要注意的是這是亂序的 - 最右邊的列標(biāo)題上的箭頭顯示了原因。 我點擊該列進行排序。 找到列的最大或最小,或者只是對數(shù)據(jù)進行不同的查看非常方便。 順便說一句,該功能與僅顯示一些列無關(guān),它總是可用的。

        console.table() 只能處理最多1000行,因此它可能不適合所有數(shù)據(jù)集。

        console.assert()

        assert()log() 是相同的函數(shù),assert()是對輸入的表達式進行斷言,只有表達式為false時,才輸出相應(yīng)的信息到控制臺,示例如下:

        var arr = [1, 2, 3];
        console.assert(arr.length === 4);
        

        有時我們需要更復(fù)雜的條件句。例如,我們已經(jīng)看到了用戶 WAL0412 的數(shù)據(jù)問題,并希望僅顯示來自這些數(shù)據(jù)的事務(wù),這是直觀的解決方案。

        console.assert(tx.buyer === 'WAL0412', tx);

        這看起來不錯,但行不通。記住,條件必須為false,斷言才會執(zhí)行,更改如下:

        console.assert(tx.buyer !== 'WAL0412', tx);

        與其中一些類似,console.assert() 并不總是特別有用。但在特定的情況下,它可能是一個優(yōu)雅的解決方案。

        console.count()

        另一個具有特殊用途的計數(shù)器,count只是作為一個計數(shù)器,或者作為一個命名計數(shù)器,可以統(tǒng)計代碼被執(zhí)行的次數(shù)。

        for(let i = 0; i < 10000; i++) {
         if(i % 2) {
         console.count('odds');
         }
         if(!(i % 5)) {
         console.count('multiplesOfFive');
         }
         if(isPrime(i)) {
         console.count('prime');
         }
        }

        這不是有用的代碼,而且有點抽象。這邊也不打算演示 isPrime 函數(shù),假設(shè)它是成立的。

        執(zhí)行后我們會得到一個列表:

        odds: 1
        odds: 2
        prime: 1
        odds: 3
        multiplesOfFive: 1
        prime: 2
        odds: 4
        prime: 3
        odds: 5
        multiplesOfFive: 2
        ...

        還有一個相關(guān)的 console.countReset(),可以使用它重置計數(shù)器。

        console.trace()

        trace() 在簡單的數(shù)據(jù)中很難演示。當(dāng)您試圖在類或庫中找出是哪個實際調(diào)用者導(dǎo)致了這個問題時,它的優(yōu)勢就顯現(xiàn)出來了。

        例如,可能有 12 個不同的組件調(diào)用一個服務(wù),但是其中一個組件沒有正確地設(shè)置依賴項。

        export default class CupcakeService {
         
         constructor(dataLib) {
         this.dataLib = dataLib;
         if(typeof dataLib !== 'object') {
         console.log(dataLib);
         console.trace();
         }
         }
         ...
        }

        這里使用 console.log() 僅告訴我們傳遞數(shù)據(jù)dataLib是什么 ,而沒有具體的傳遞的路徑。不過,console.trace() 會非常清楚地告訴我們問題出在 Dashboard.js,我們可以看到是 new CupcakeService(false) 導(dǎo)致錯誤。

        console.time()

        console.time() 是一個用于跟蹤操作時間的專用函數(shù),它是跟蹤 JavaScript執(zhí)行時間的好方法。

        function slowFunction(number) {
         var functionTimerStart = new Date().getTime();
         // something slow or complex with the numbers. 
         // Factorials, or whatever.
         var functionTime = new Date().getTime() - functionTimerStart;
         console.log(`Function time: ${ functionTime }`);
        }
        var start = new Date().getTime();
        
        for (i = 0; i < 100000; ++i) {
         slowFunction(i);
        }
        
        var time = new Date().getTime() - start;
        console.log(`Execution time: ${ time }`);

        這是一種老派的做法,我們使用 console.time() 來簡化以上代碼。

        const slowFunction = number => {
         console.time('slowFunction');
         // something slow or complex with the numbers. 
         // Factorials, or whatever.
         console.timeEnd('slowFunction');
        }
        console.time();
        
        for (i = 0; i < 100000; ++i) {
         slowFunction(i);
        }
        console.timeEnd();

        我們現(xiàn)在不再需要做任何計算或設(shè)置臨時變量。

        console.group()

        // this is the global scope
        let number = 1;
        console.group('OutsideLoop');
        console.log(number);
        console.group('Loop');
        for (let i = 0; i < 5; i++) {
         number = i + number;
         console.log(number);
        }
        console.groupEnd();
        console.log(number);
        console.groupEnd();
        console.log('All done now');

        輸出如下:

        并不是很有用,但是您可以看到其中一些是如何組合的。

        class MyClass {
         constructor(dataAccess) {
         console.group('Constructor');
         console.log('Constructor executed');
         console.assert(typeof dataAccess === 'object', 
         'Potentially incorrect dataAccess object');
         this.initializeEvents();
         console.groupEnd();
         }
         initializeEvents() {
         console.group('events');
         console.log('Initialising events');
         console.groupEnd();
         }
        }
        let myClass = new MyClass(false);

        這是很多工作和很多調(diào)試信息的代碼,可能不是那么有用。 但它仍然是一個有趣的想法,這樣寫使你的日志記錄更加清晰。

        選擇DOM元素

        如果熟悉jQuery,就會知道 $(‘.class')$(‘#id') 選擇器有多么重要。它們根據(jù)與之關(guān)聯(lián)的類或 ID 選擇 DOM 元素。

        但是當(dāng)你沒有引用 jQuery時,你仍然可以在谷歌開發(fā)控制臺中進行同樣的操作。

        $(‘tagName') $(‘.class') $(‘#id') and $(‘.class #id') 等效于document.querySelector(‘ ‘),這將返回 DOM 中與選擇器匹配的第一個元素。

        可以使用 \$\$(tagName)\$\$(.class), 注意雙元符號,根據(jù)特定的選擇器選擇DOM的所有元素。這也將它們放入數(shù)組中,你也可以通過指定數(shù)組中該元素的位置來從中選擇特定的元素。

        例如,$$(‘.className') 獲取具有類 className 的所有元素,而\$\$(‘.className')[0]\$\$(‘.className')[1]獲取到分別是第一個和第二個元素。

        將瀏覽器轉(zhuǎn)換為編輯器

        你有多少次想知道你是否可以在瀏覽器中編輯一些文本? 答案是肯定的,你可以將瀏覽器轉(zhuǎn)換為文本編輯器。 你可以在 DOM 中的任何位置添加文本和從中刪除文本。

        你不再需要檢查元素并編輯HTML。相反,進入開發(fā)人員控制臺并輸入以下內(nèi)容:

        document.body.contentEditable=true

        這將使內(nèi)容可編輯。現(xiàn)在,你幾乎可以編輯DOM中的任何內(nèi)容。

        查找與DOM中的元素關(guān)聯(lián)的事件

        調(diào)試時,需要查找 DOM 中某個元素的事件偵聽器感時,谷歌控制臺了 getEventListeners使找到這些事件更加容易且直觀。

        getEventListeners($(‘selector')) 返回一個對象數(shù)組,其中包含綁定到該元素的所有事件。你可以展開對象來查看事件:

        要找到特定事件的偵聽器,可以這樣做:

        getEventListeners($(‘selector')).eventName[0].listener 

        這將顯示與特定事件關(guān)聯(lián)的偵聽器。這里 eventName[0] 是一個數(shù)組,它列出了特定事件的所有事件。例如:

        getEventListeners($(‘firstName')).click[0].listener 

        將顯示與 ID 為 ‘firstName' 的元素的單擊事件關(guān)聯(lián)的偵聽器。

        監(jiān)控事件

        如果希望在執(zhí)行綁定到 DOM 中特定元素的事件時監(jiān)視它們,也可以在控制臺中這樣做。你可以使用不同的命令來監(jiān)控其中的一些或所有事件:

      1. monitorEvents($(‘selector')) 將監(jiān)視與選擇器的元素關(guān)聯(lián)的所有事件,然后在它們被觸發(fā)時將它們打印到控制臺。例如,monitore($(#firstName)) 將打印 ID 為 firstName元素的所有事件。
      2. monitorEvents($(‘selector'),'eventName') 將打印與元素綁定的特定事件。 你可以將事件名稱作為參數(shù)傳遞給函數(shù)。 這將僅記錄綁定到特定元素的特定事件。 例如,monitorEvents($(‘#firstName'),'click') 將打印綁定到ID為'firstName'的元素的所有 click 事件。
      3. monitore($(selector),[eventName1, eventName3', .])將根據(jù)您自己的需求記錄多個事件。與其傳遞單個事件名作為參數(shù),不如傳遞包含所有事件的字符串?dāng)?shù)組。例如monitore($(#firstName),[click, focus])將記錄與ID firstName元素綁定的 click事件和focus事件。
      4. unmonitorevent ($(selector)):這將停止監(jiān)視和打印控制臺中的事件。
      5. 檢查 DOM 中的一個元素

        你可以直接從控制臺檢查一個元素:

      6. inspect($(‘selector')) 將檢查與選擇器匹配的元素,并轉(zhuǎn)到 Chrome Developer Tools中的 Elements 選項卡。 例如, inspect($(‘#firstName')) 將檢查 ID為'firstName' 的元素,spect($(‘a(chǎn)')[3]) 將檢查 DOM 中的第 4 個 a 元素。
      7. $0, $1, $2 等可以幫助你獲取最近檢查過的元素。 例如,$0 表示最后檢查的 DOM 元素,而$1 倒數(shù)第二個檢查的 DOM 元素。
      8. 檢索最后一個結(jié)果的值

        你可以將控制臺用作計算器。當(dāng)你這樣做的時候,你可能需要用第二個來跟蹤一個計算。以下是如何從內(nèi)存中檢索先前計算的結(jié)果:

        $_

        過程如下:

        2+3+4
        9 //- The Answer of the SUM is 9
        
        $_
        9 // Gives the last Result
        
        $_ * $_
        81 // As the last Result was 9
        
        Math.sqrt($_)
        9 // As the last Result was 81
        
        $_
        9 // As the Last Result is 9

        清除控制臺和內(nèi)存

        如果你想清除控制臺及其內(nèi)存,輸入如下:

        clear()

        代碼部署后可能存在的BUG沒法實時知道,事后為了解決這些BUG,花了大量的時間進行l(wèi)og 調(diào)試,這邊順便給大家推薦一個好用的BUG監(jiān)控工具 Fundebug。

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        靈活使用console讓js調(diào)試更簡單的方法步驟

        靈活使用console讓js調(diào)試更簡單的方法步驟:Web開發(fā)最常用的高度就是 console.log ,雖然 console.log 占有一席之地,但很多人并沒有意識到 console 本身除了基本 log 方法之外還有很多其他方法。 適當(dāng)使用這些方法可以使調(diào)試更容易,更快速,更直觀。 console.log() 在console.l
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 国产亚洲玖玖玖在线观看| 国产亚洲?V无码?V男人的天堂| 久操免费在线观看| 最近2019免费中文字幕视频三| 16女性下面无遮挡免费| 成人片黄网站色大片免费| 日产国产精品亚洲系列| 亚洲αv在线精品糸列| 亚洲另类春色校园小说| 久久亚洲精品11p| 日本人成在线视频免费播放| 日本亚洲视频在线 | 免费国产va在线观看| 一级做α爱过程免费视频| 久久久久久AV无码免费网站| 免费观看国产精品| 中文字幕亚洲一区| 4444亚洲国产成人精品| 香港一级毛片免费看| 69成人免费视频| 国产成人亚洲精品影院| 亚洲伊人久久大香线蕉AV| 久草免费福利视频| 国产国产人免费人成免费视频| 久久久久亚洲精品无码蜜桃| 特级aa**毛片免费观看| 国产国拍精品亚洲AV片| 99视频免费播放| 亚洲av日韩综合一区在线观看| 青娱乐在线免费观看视频| 亚洲午夜久久久久久噜噜噜| 337P日本欧洲亚洲大胆精品| 67194成是人免费无码| 亚洲综合激情九月婷婷| 久久久久免费精品国产小说| 亚洲免费人成视频观看| 亚洲欧洲一区二区三区| 一级做a爰黑人又硬又粗免费看51社区国产精品视 | 特级毛片全部免费播放| 亚洲av最新在线网址| A级毛片内射免费视频|