你可能不知道的14個JavaScript調試技巧

瞭解你的工具可以在完成任務的過程中發揮重大作用。儘管傳言 JavaScript 難以調試,但是如果你掌握了一些調試技巧,那麼你將會花費更少的時間來解決這些錯誤。

我們已經列出了14個你可能不知道的調試技巧,但可能要記住,這樣下次你需要調試 JavaScript 代碼時就可以馬上使用了!

現在就馬上開始。

#1. ‘debugger;’

除了 console.log , debugger; 是我們最喜歡、快速且骯髒的調試工具。一旦執行到這行代碼,Chrome 會在執行時自動停止。 你甚至可以使用條件語句加上判斷,這樣可以只在你需要的時候運行。愚人碼頭注:本人實在覺得這種調試方面很不好,因爲後續的調試步驟和斷點調試沒什麼區別。而且調試完成後,還要記住刪掉這行代碼。確實有點骯髒。

JavaScript 代碼:

if (thisThing) {
debugger;
}

#2. 將 objects 顯示爲表格

有時,你有一個複雜的對象要查看。你可以用 console.log 查看並滾動瀏覽該對象,或者使用console.table展開,更容易看到正在處理的內容!

JavaScript 代碼:

var animals = [
{ animal: 'Horse', name: 'Henry', age: 43 },
{ animal: 'Dog', name: 'Fred', age: 13 },
{ animal: 'Cat', name: 'Frodo', age: 18 }
];
console.table(animals);

輸出:

你可能不知道的14個JavaScript調試技巧

#3. 嘗試所有的屏幕尺寸

雖然在桌面設備上安裝不同移動設備模擬器非常棒,但在現實世界中並不可行。 應該是調整你的可視窗口,而不是替換移動設備? Chrome爲你提供所需的一切。 進入Chrome 開發者調試工具,然後點擊 ‘toggle device mode(切換設備模式)’ 按鈕。 實時觀察窗口變化即可!

你可能不知道的14個JavaScript調試技巧

你可能不知道的14個JavaScript調試技巧

#4. 如何快速找到DOM元素

在 Elements(元素) 面板中標記 DOM 元素,並可以在 console(控制檯) 中使用它。Chrome 檢測器會保留其歷史記錄中的最後 5 個元素,以便最終標記的元素顯示 $0 ,倒數第二個標記元素 $1 ,依此類推。

如果你按照“item-4”,“item-3”,“item-2”,“item-1”,“item-0”的順序標記下列項,則可以在控制檯中像這樣訪問DOM節點:

你可能不知道的14個JavaScript調試技巧

#5. 使用 console.time() 和 console.timeEnd() 來標記循環耗時

要確切地知道某段代碼需要執行多長時間,尤其是在調試慢循環時,可能會非常有用。您甚至可以通過爲該方法分配標籤來設置多個定時器。讓我們看看它是如何工作的:

JavaScript 代碼:

console.time('Timer1');
var items = [];
for(var i = 0; i < 100000; i++){
items.push({index: i});
}
console.timeEnd('Timer1');

運行產生了如下結果:

你可能不知道的14個JavaScript調試技巧

#6. 獲取函數的堆棧跟蹤信息

你可能知道JavaScript框架,會引入大量代碼。

它創建視圖觸發事件,而且你最終會想知道函數調用是怎麼發生的。

因爲 JavaScript 不是一個很結構化的語言,有時候很難完整的瞭解到底 發生了什麼 以及 什麼時候發生 的。 使用 console.trace((僅僅只是在控制檯中跟蹤) 可以方便地調試JavaScript 。

假設你現在想看 car 實例在第24行調用 funcZ 函數的完整堆棧軌跡信息:

JavaScript 代碼:

var car; 
var func1 = function() {
func2();
} 
var func2 = function() {
func4();
}
var func3 = function() {
} 
var func4 = function() {
car = new Car();
car.funcX();
}
var Car = function() {
this.brand = ‘volvo’;
this.color = ‘red’;
this.funcX = function() {
this.funcY();
}
this.funcY = function() {
this.funcZ();
}
this.funcZ = function() {

24行將輸出:

你可能不知道的14個JavaScript調試技巧

現在我們可以看到 func1 調用 func2, func2 調用 func4。 Func4 創建了一個 Car 的實例,然後調用函數 car.funcX,依此類推。

即使你認爲非常瞭解自己的代碼,這種分析仍然可以讓你感到很方便。假如你想改進你的代碼。獲取跟蹤信息和所有涉及的函數名單,每一項都可以點擊,你可以在他們之間來回切換。這就像一個特地爲你準備的菜單。

#7. 美化代碼使調試 JavaScript 變得簡單

有時你可能在生產環境中遇到問題,但是你的source maps沒有部署在服務器上。 不要害怕 。Chrome 可以將你的 Javascript 文件美化爲更易閱讀的格式。雖然代碼不會像你的真實代碼那樣有用 – 但至少你可以看到發生了什麼。點擊檢查器中源代碼查看器下方的 {} 美化按鈕即可。

你可能不知道的14個JavaScript調試技巧

#8. 快速查找要調試的函數

假設你想在一個函數中設置一個斷點。

最常見的兩種方法是:

1.在源代碼查看器查找到相應的行,並添加一個斷點
2.在代碼中添加debugger

在這兩個解決方案中,您必須在文件中單擊以調試特定行。

使用控制檯打斷點可能不太常見。在控制檯中使用 debug(funcName),當到達傳入的函數時,代碼將停止。

這個調試方法很快, 但缺點是不適用於私有函數或匿名函數。但除了私有和匿名函數, 這可能是找到調試函數的最快方法。(注意:這個函數和console.debug 函數是不同的東西。)

JavaScript 代碼:

var func1 = function() {
func2();
};
var Car = function() {
this.funcX = function() {
this.funcY();
}
this.funcY = function() {
this.funcZ();
}
}
var car = new Car();

在控制檯中輸入 debug(car.funcY) ,當調用 car.funcY 時,腳本將以調試模式停止:

你可能不知道的14個JavaScript調試技巧

#9. 屏蔽不相關的代碼

現在,我們經常在應用中引入多個庫或框架。其中大多數都經過良好的測試且相對沒有陷阱。 但是,調試器仍然會進入與調試任務無關的文件。解決方案是屏蔽不需要調試的腳本。當然也可以包括你自己的腳本。

你可能不知道的14個JavaScript調試技巧

#10. 在複雜的調試過程中尋找重點

在更復雜的調試中,我們有時希望輸出很多行。你可以做的事情就是使用更多控制檯函數來保持良好的輸出結構,例如, console.log, console.debug, console.warn, console.info, console.error等等。然後,可以在控制檯中快速瀏覽。但有時候,某些 JavaScrip 調試信息並不是你需要的。現在,可以自己美化調試信息了。在調試 JavaScript 時,可以使用 CSS 並自定義控制檯信息:

JavaScript 代碼:

console.todo = function(msg) {
console.log(‘ % c % s % s % s‘, ‘color: yellow; background - color: black;’, ‘–‘, msg, ‘–‘);
}
console.important = function(msg) {
console.log(‘ % c % s % s % s’, ‘color: brown; font - weight: bold; text - decoration: underline;’, ‘–‘, msg, ‘–‘);
}
console.todo(“This is something that’ s need to be fixed”);
console.important(‘This is an important message’);

輸出:

你可能不知道的14個JavaScript調試技巧

例如:

在 console.log() 中, 可以用 %s 設置字符串,%i 設置數字,%c 設置自定義樣式等等,還有很多更好的 console.log() 使用方法。 如果使用的是單頁應用框架,可以爲視圖(view)消息創建一個樣式,爲模型(models),集合(collections),控制器(controllers)等創建另一個樣式。也許還可以像 wlog,clog 和 mlog 一樣發揮想象力!

#11. 觀察特定函數的調用及其參數

在 Chrome 控制檯中,您可以關注特定的函數。 每次調用該函數時,都會對傳入的參數值進行記錄。

JavaScript 代碼:

var func1 = function(x, y, z) {
//....
};

輸出:

你可能不知道的14個JavaScript調試技巧

這是查看哪些參數傳遞給函數的好方法。 但是我必須說,如果控制檯可以告訴我們需要多少參數,那將是一件好事。 在上面的例子中,func1 期望 3個參數,但是隻有 2 個參數被傳入。如果在代碼中沒有處理這個參數,它可能導致一個可能的 bug 。

#12. 在控制檯中快速訪問元素

在控制檯中執行 querySelector 一種更快的方法是使用美元符。$('css-selector') 將會返回CSS選擇器的第一個匹配項。$$('css-selector') 將會返回所有匹配項。如果多次使用一個元素,可以把它保存爲一個變量。

你可能不知道的14個JavaScript調試技巧

#13. Postman 很棒(但Firefox更快)

許多開發人員使用 Postman 查看ajax請求。Postman真的很優秀。但打開一個新的瀏覽器窗口,新寫一個請求對象來測試,這確實顯得很麻煩。

有時使用瀏覽器更容易。

當你使用瀏覽器查看時,如果請求一個密碼驗證頁面,你不需要擔心身份驗證的cookie。下面看,在Firefox中如何編輯並重新發送請求。

打開檢查員並轉到網絡選項卡。 右鍵單擊所需的請求,然後選擇編輯並重新發送。 現在你可以改變任何你想要的。 更改標題並編輯您的參數並點擊重新發送。

下面我用不同的屬性提出兩次請求:

你可能不知道的14個JavaScript調試技巧

#14. 節點變化時中斷

DOM 是一個有趣的東西。 有時候它會被修改,但是你並不知道爲什麼。 但是,當您需要調試 JavaScript 時,Chrome會讓您在DOM元素髮生更改時暫停。 你甚至可以監視它的屬性。 在Chrome 檢查器中,右鍵單擊該元素,然後在設置中選擇一箇中斷就可以了:

你可能不知道的14個JavaScript調試技巧

這裏推薦一下我的前端學習=交流=q=君羊:731771211 ,自己整理了一份2019最全面前端學習資料,從最基礎的HTML+CSS+JS【炫酷特效,遊戲,插件封裝,設計模式】到移動端HTML5的項目實戰的學習資料都有整理,送給每一位前端小夥伴

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章