国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript調試的多個必備小Tips

2019-11-19 17:56:01
字體:
來源:轉載
供稿:網友

前言

調試技巧,在任何一項技術研發中都可謂是必不可少的技能。掌握各種調試技巧,必定能在工作中起到事半功倍的效果。譬如,快速定位問題、降低故障概率、幫助分析邏輯錯誤等等。而在互聯網前端開發越來越重要的今天,如何在前端開發中降低開發成本,提升工作效率,掌握前端開發調試技巧尤為重要。

本文將一一講解各種前端JS調試技巧,也許你已經熟練掌握,那讓我們一起來溫習,也許有你沒見過的方法,不妨一起來學習,也許你尚不知如何調試,趕緊趁此機會填補空白。

一、‘debugger;'

除了console.log,debugger就是另一個我很喜歡的快速調試的工具,將debugger加入代碼之后,Chrome會自動在插入它的地方停止,很像C或者Java里面打斷點。你也可以在一些條件控制中插入該調試語句,譬如:

if (thisThing) { debugger;}

二、將Objects以表格形式展示

有時候我們需要看一些復雜的對象的詳細信息,最簡單的方法就是用console.log然后展示成一個列表狀,上下滾動進行瀏覽。不過似乎用console.table展示成列表會更好呦,大概是介個樣子:

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

三、多屏幕尺寸測試

Chrome有一個非常誘人的功能就是能夠模擬不同設備的尺寸,在Chrome的Inspector中點擊toggle device mode按鈕,然后就可以在不同的設備屏幕尺寸下進行調試咯:

四、在Console快速選定DOM元素

在Elements選擇面板中選擇某個DOM元素然后在Console中使用該元素也是非常常見的一個操作,Chrome Inspector會緩存最后5個DOM元素在它的歷史記錄中,你可以用類似于Shell中的$0等方式來快速關聯到元素。譬如下圖的列表中有‘item-4′, ‘item-3', ‘item-2', ‘item-1', ‘item-0'這幾個元素,你可以這么使用:

五、獲取某個函數的調用追蹤記錄

JavaScript框架極大方便了我們的開發,但是也會帶來大量的預定義的函數,譬如創建View的、綁定事件的等等,這樣我們就不容易追蹤我們自定義函數的調用過程了。雖然JavaScript不是一個非常嚴謹的語言,有時候很難搞清楚到底發生了啥,特別是當你需要審閱其他人的代碼的時候。這時候console.trace就要起作用咯,它可以幫你進行函數調用的追蹤。譬如下面的代碼中我們要追蹤出car對象中對于funcZ的調用過程:

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() {console.trace(‘trace car')}} func1();

這邊就可以清晰地看出func1調用了func2,然后調用了func4,func4創建了Car的實例然后調用了car.funcX。

六、格式化被壓縮的代碼

有時候在生產環境下我們發現了一些莫名奇妙的問題,然后忘了把sourcemaps放到這臺服務器上,或者在看別人家的網站的源代碼的時候,結果就看到了一坨不知道講什么的代碼,就像下圖。Chrome為我們提供了一個很人性化的反壓縮工具來增強代碼的可讀性,大概這么用:

七、快速定位調試函數

當我們想在函數里加個斷點的時候,一般會選擇這么做:

     1.在Inspector中找到指定行,然后添加一個斷點

     2.在腳本中添加一個debugger調用

不過這兩種方法都存在一個小問題就是都要到對應的腳本文件中然后再找到對應的行,這樣會比較麻煩。這邊介紹一個相對快捷點的方法,就是在console中使用debug(funcName)然后腳本會在指定到對應函數的地方自動停止。這種方法有個缺陷就是無法在私有函數或者匿名函數處停止,所以還是要因時而異:

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

八、禁止不相關的腳本運行

當我們開發現代網頁的時候都會用一些第三方的框架或者庫,它們幾乎都是經過測試并且相對而言Bug較少的。不過當我們調試我們自己的腳本的時候也會一不小心跳到這些文件中,引發額外的調試任務。解決方案呢就是禁止這部分不需要調試的腳本運行,詳情可見這篇文章:: javascript-debugging-with-black-box。

在較復雜的調試情況下發現關鍵元素 在一些復雜的調試環境下我們可能要輸出很多行的內容,這時候我們習慣性的會用console.log, console.debug, console.warn, console.info, console.error這些來進行區分,然后就可以在Inspector中進行過濾。不過有時候我們還是希望能夠自定義顯示樣式,你可以用CSS來定義個性化的信息樣式:

console.todo = function(msg) {console.log(‘ % c % s % s % s‘, ‘color: yellow; background - color: black;', ‘

主站蜘蛛池模板:
桂平市|
赫章县|
井研县|
临城县|
增城市|
文登市|
庄河市|
香格里拉县|
宁强县|
邵阳市|
昭苏县|
宣威市|
泽普县|
体育|
井陉县|
庄河市|
白河县|
古蔺县|
宜良县|
崇义县|
金坛市|
洛川县|
晋江市|
巴彦县|
会宁县|
梅州市|
灵石县|
西华县|
奇台县|
辽阳县|
廉江市|
雷波县|
白朗县|
拉萨市|
神农架林区|
扶沟县|
惠来县|
蓬安县|
清徐县|
右玉县|
民和|