1. 程式人生 > >精通這 14 個 JavaScript 除錯技巧,少走很多彎路!

精通這 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'age43

 },
animal'Dog'name'Fred'age13 },
animal'Cat'name'Frodo'age18 }
];
console.table(animals);


輸出:



3. 嘗試所有的螢幕尺寸


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



4. 如何快速找到DOM元素


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


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



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


執行產生了如下結果:



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行將輸出:



現在我們可以看到 func1 呼叫 func2, func2 呼叫 func4。 Func4 建立了一個 Car 的例項,然後呼叫函式 car.funcX,依此類推。


即使你認為非常瞭解自己的程式碼,這種分析仍然可以讓你感到很方便。假如你想改進你的程式碼。獲取跟蹤資訊和所有涉及的函式