亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

靈活使用console讓js調試更簡單的方法步驟

2024-05-06 16:50:13
字體:
來源:轉載
供稿:網友

Web開發最常用的高度就是 console.log ,雖然 console.log 占有一席之地,但很多人并沒有意識到 console本身除了基本 log 方法之外還有很多其他方法。 適當使用這些方法可以使調試更容易,更快速,更直觀。

console.log()

console.log 中有很多人們意想不到的功能。雖然大多數人使用 console.log(object) 來查看對象,但是你也可以使用 console.log(object, otherObject, string),它會把它們都整齊地記錄下來,偶爾也會很方便。

不僅如此,還有另一種格式化的: console.log(msg, values),這很像 C 或 PHP 中的sprintf。

console.log('I like %s but I do not like %s.', 'Skittles', 'pus');

會像你預期的那樣輸出:

> I like Skittles but I do not like pus.

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

console,js調試

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

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

console,js調試

它并不優雅,也不是特別有用。當然,這并不是一個真正的按鈕。

console,js調試

它有用嗎? 恩恩恩。

console.dir()

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

console,js調試

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

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

使用 console.log 查看:

console,js調試

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

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

console,js調試

console.warn()

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

console,js調試

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

console.table()

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

例如,這里有一個數據列表。

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 來輸出上面的內容,我們會得到一些非常無用的輸出:

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

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

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

console,js調試

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

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

console,js調試

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

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

console.assert()

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

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

console,js調試

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

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

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

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

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

console.count()

另一個具有特殊用途的計數器,count只是作為一個計數器,或者作為一個命名計數器,可以統計代碼被執行的次數。

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 函數,假設它是成立的。

執行后我們會得到一個列表:

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

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

console.trace()

trace() 在簡單的數據中很難演示。當您試圖在類或庫中找出是哪個實際調用者導致了這個問題時,它的優勢就顯現出來了。

例如,可能有 12 個不同的組件調用一個服務,但是其中一個組件沒有正確地設置依賴項。

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

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

console.time()

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

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();

我們現在不再需要做任何計算或設置臨時變量。

console.group()

// this is the global scopelet 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');

輸出如下:

console,js調試

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

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);

console,js調試

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

選擇DOM元素

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

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

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

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

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

console,js調試

將瀏覽器轉換為編輯器

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

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

document.body.contentEditable=true

這將使內容可編輯?,F在,你幾乎可以編輯DOM中的任何內容。

查找與DOM中的元素關聯的事件

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

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

console,js調試

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

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

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

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

將顯示與 ID 為 ‘firstName' 的元素的單擊事件關聯的偵聽器。

監控事件

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

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

檢查 DOM 中的一個元素

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

  • inspect($(‘selector')) 將檢查與選擇器匹配的元素,并轉到 Chrome Developer Tools中的 Elements 選項卡。 例如, inspect($(‘#firstName')) 將檢查 ID為'firstName' 的元素,spect($(‘a')[3]) 將檢查 DOM 中的第 4 個 a 元素。
  • $0, $1, $2 等可以幫助你獲取最近檢查過的元素。 例如,$0 表示最后檢查的 DOM 元素,而$1 倒數第二個檢查的 DOM 元素。

檢索最后一個結果的值

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

$_

過程如下:

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

清除控制臺和內存

如果你想清除控制臺及其內存,輸入如下:

clear()

代碼部署后可能存在的BUG沒法實時知道,事后為了解決這些BUG,花了大量的時間進行log 調試,這邊順便給大家推薦一個好用的BUG監控工具 Fundebug。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产高清视频一区三区| 日本午夜精品理论片a级appf发布| 日韩成人av在线播放| 欧美日韩亚洲网| 亚洲图片制服诱惑| 日韩视频免费在线| 日韩中文综合网| 国产精品99久久久久久人| 欧美色欧美亚洲高清在线视频| 国产mv久久久| 北条麻妃一区二区三区中文字幕| 国产精品一区二区在线| 亚洲色图偷窥自拍| 日韩欧美成人区| 国产精品美女无圣光视频| 中文字幕欧美日韩| 精品日韩美女的视频高清| 中文字幕久热精品在线视频| 高清欧美性猛交xxxx黑人猛交| 一本大道香蕉久在线播放29| 亚洲午夜久久久久久久| 欧美国产激情18| 黄色成人在线免费| 国产高清视频一区三区| 97国产精品免费视频| 亚洲免费精彩视频| 久久久综合av| 92裸体在线视频网站| 久久精品亚洲94久久精品| 欧美老妇交乱视频| 欧美电影在线观看| 98精品在线视频| 亚洲91精品在线观看| 日韩激情在线视频| 欧美电影免费观看高清完整| 另类专区欧美制服同性| 成人激情视频在线| 97久久久久久| 久久99久久99精品中文字幕| 在线看日韩av| 久久中文字幕视频| 91免费看片网站| 日韩在线欧美在线| 亲子乱一区二区三区电影| 亚洲va男人天堂| 68精品久久久久久欧美| 在线电影av不卡网址| 91在线免费视频| 国产精品美女呻吟| 97人人爽人人喊人人模波多| 精品精品国产国产自在线| 国产精品成熟老女人| 91精品综合久久久久久五月天| 日韩在线观看高清| 日本伊人精品一区二区三区介绍| 亚洲品质视频自拍网| 2019精品视频| 91免费看片在线| 欧美精品久久久久| 92福利视频午夜1000合集在线观看| 亚洲一区二区三| 精品国产999| 日本精品在线视频| 日韩欧美一区二区在线| 久久香蕉国产线看观看网| 国产日韩专区在线| 成人精品福利视频| 国产91精品不卡视频| 亚洲国产一区二区三区四区| 伊人久久久久久久久久| 91亚洲一区精品| 国产欧美精品一区二区三区介绍| 97视频在线观看成人| 伊人久久精品视频| 亚洲国产精品va在线观看黑人| 亚洲一区二区免费在线| 欧美在线一区二区视频| 黑丝美女久久久| 日本高清+成人网在线观看| 欧美成人激情视频免费观看| 欧美精品免费看| 欧美黑人xxx| 91国产在线精品| 欧美精品videofree1080p| 久久精品99国产精品酒店日本| 欧美亚洲另类视频| 成人综合国产精品| 亚洲电影av在线| 亚洲国产精品va在线观看黑人| 日韩在线视频一区| 91亚洲人电影| 亚洲伊人久久综合| 欧美性猛交xxx| 日韩欧美在线中文字幕| 97视频在线观看亚洲| 中文字幕亚洲国产| 狠狠躁夜夜躁人人爽超碰91| 亚州精品天堂中文字幕| 456国产精品| 国产suv精品一区二区三区88区| 久久精品中文字幕免费mv| 国产精品普通话| 亚洲人成网站色ww在线| 狠狠做深爱婷婷久久综合一区| 97超碰蝌蚪网人人做人人爽| 日韩成人网免费视频| xvideos成人免费中文版| 久久久人成影片一区二区三区| 国产精品一区二区三区毛片淫片| 日韩精品一二三四区| 中文字幕精品久久久久| 精品国产一区二区三区在线观看| 精品国产一区二区三区久久久狼| 红桃av永久久久| 日韩免费视频在线观看| 最近2019中文免费高清视频观看www99| 日本中文字幕久久看| 欧美黑人国产人伦爽爽爽| 色偷偷偷亚洲综合网另类| 亚洲天堂av图片| 亲子乱一区二区三区电影| 色99之美女主播在线视频| 蜜月aⅴ免费一区二区三区| 91在线看www| 久久久精品中文字幕| 国产精品成久久久久三级| 国产亚洲一区二区精品| 国内精品久久影院| 国内精品久久久久久中文字幕| 亚洲人成电影网| 亚洲最新视频在线| 欧美一级在线播放| 国产精品久久久久久av福利| 亚洲激情中文字幕| 在线观看国产精品淫| 成人性教育视频在线观看| 尤物yw午夜国产精品视频| 91精品国产自产在线老师啪| 亚洲成人精品久久久| 91精品国产自产91精品| 欧美精品做受xxx性少妇| 九九热精品视频国产| 欧美性xxxx极品高清hd直播| 欧美日韩国产综合视频在线观看中文| 成人欧美一区二区三区在线湿哒哒| 亚洲综合最新在线| 精品久久香蕉国产线看观看gif| 精品国产福利在线| 热久久免费国产视频| 91av视频在线播放| 51视频国产精品一区二区| 国产日韩在线播放| 亚洲精品成a人在线观看| 福利精品视频在线| 亚洲欧美国产精品久久久久久久| 亚洲国产欧美日韩精品| 97精品欧美一区二区三区| 国产精品久久久久久久久久新婚| 91精品视频免费| 久久久久久综合网天天| 欧美疯狂xxxx大交乱88av| 久久久爽爽爽美女图片| 91色精品视频在线| 一本色道久久88精品综合|