實用Javascript 調試技巧分享

2021-01-08 SegmentFault思否

本文原載於SegmentFault專欄「半路出家老菜鳥」

作者:MudOnTire

整理編輯:SegmentFault

見過太多同學調試Javascript只會用簡單的console.log甚至alert,看著真為他們捉急。因為大多數同學追求優雅而高效地寫代碼,卻忽略了如何優雅而高效地調試代碼,不得不說是有點「偏科」了。下面我就分享一些實用且聰明的調試技巧,希望能讓大家調試自己代碼的時候更加從容自信。

1. 不要使用alert

首先,alert只能列印出字符串,如果列印的對象不是String,則會調用toString()方法將該對象轉成字符串(比如轉成[object Object]這種),所以除非你列印String類型的對象,其他什麼信息都獲取不到。其次,alert會阻塞UI和javascript的執行,必須點擊'OK'按鈕才能繼續,非常低效。所以,喜歡使用alert的同學可以改改這個習慣了。

2. 學會使用console.log

console.log誰都會用,但是很多同學只知道最簡單的console.log(x)這樣列印一個對象,當你的代碼裡面console.log多了之後,會很難將某條列印結果和代碼對應,所以我們可以給列印信息加上一個標籤便於區分:

let x = 1;console.log('aaaaaaaa', x);

得到:

標籤不一定要有明確的含義,視覺效果顯著就可以了,當然有明確意義更好。

事實上,console.log可以接收任意多的參數,最後將這些對象拼接輸出,比如:

如果列印信息過多,不容易找到目標信息的話,可以在控制臺中進行過濾:

注意點

在使用console.log列印一個引用類型(比如數組和自定義對象)的對象的時候,輸出結果可能並不是執行console.log方法那個時間點的值。舉個例子:

可以發現兩個console.log輸出的結果展開後都是[1, 2, 3, 4],因為數組是引用類型,所以在展開後獲取到的都是數組最新的狀態。我們可以使用JSON.parse(JSON.stringify(...))來解決這個問題:

3. 學會使用console.dir

我們有時候想看看一個DOM對象裡面到底有什麼屬性和方法,但是常規的console.log列印出來的只是HTML標籤,就像這樣:

和直接審查元素沒有什麼區別。

如果我們想看到DOM對象作為JavaScript對象的結構可以使用console.dir,比如:

事實上,console.dir可以列印出任何JavaScript對象的屬性列表,比如列印一個方法:

4. 學會使用console.table

我們經常會遇到這樣的場景:獲取到一個用戶列表,每個用戶有很多屬性,但是我們只想查看其中的某些屬性,在用console.log列印出來的時候需要把每個用戶對象展開一個個查看,非常麻煩。而console.table完美的解決這個問題,比如我只想獲取到下列用戶的id和坐標:

console.log列印結果:

console.table列印結果:

非常的準確和快速!

5. 學會使用console.time

有時候我們想知道一段代碼的性能或者一個異步方法需要運行多久,這時候需要用到定時器,JavaScript提供了現成的console.time方法,例如:

6. 使用debugger打斷點

有時候我們需要打斷點進行單步調試,一般會選擇在瀏覽器控制臺直接打斷點,但這樣還需要先去Sources裡面找到源碼,然後再找到需要打斷點的那行代碼,比較費時間。使用debugger關鍵詞,我們可以直接在源碼中定義斷點,方便很多,比如:

7. 查到源碼文件

有時候我們想在控制臺的Sources中查找某個js源文件,要把文件夾逐一點開找,非常麻煩。其實Chrome提供了文件的搜索功能,只不過大部分時候我們給忽略了。

只要按Command + P(windows的快捷鍵請自行查看)就能彈出搜索框搜索你想要找的文件啦:

8. 壓縮JS文件的閱讀

有時候我們需要在Sources中閱讀一段js代碼,但是發現它被壓縮了,Chrome也提供了和方便的格式化工具,讓代碼變得重新可讀:

點完之後變成這樣:

以上就是我個人在平時比較常用的一些調試小技巧,如果大家有其他好的調試技巧也歡迎分享,謝謝!

相關焦點

  • Javascript之實用debug調試技巧分享
    見過太多同學調試Javascript只會用簡單的 console.log甚至 alert,看著真為他們捉雞。。因為大多數同學追求優雅而高效地寫代碼,卻忽略了如何優雅而高效地調試代碼,不得不說是有點「偏科」了。
  • javascript如何執行調試
    javascript中執行調試的方法有:使用console.log()方法,或者使用關鍵字「debugger」。有時代碼可能會包含某些錯誤。而作為腳本語言,JavaScript無法在瀏覽器中顯示任何錯誤消息。但是,這些錯誤卻會影響輸出。
  • gdb實用的調試技巧:啟動方式、堆棧信息、單步調試
    對於很多開發者來說,開發過程中難免會遇到各種各樣的bug, 所以,每個開發者應該考慮如何快速高效定位問題原因,而gdb是linux上很實用的調試工具,熟練掌握其調試技巧,將有助於提高解決問題的效率,也是開發者應該掌握的基本技能。
  • gdb實用的調試技巧:啟動方式、堆棧信息、單步調試
    對於很多開發者來說,開發過程中難免會遇到各種各樣的bug, 所以,每個開發者應該考慮的如何快速高效定位問題原因,而gdb是linux上很實用的調試工具,熟練掌握其調試技巧,將有助於提高解決問題的效率,也是開發者應該掌握的基本技能。
  • termux安裝伺服器,手機瀏覽器調試javascript
    用手機瀏覽器就可以訪問手機上的伺服器,但是瀏覽器調試javascript起來很不方便。在手機瀏覽器調試javascript,我用try catchtry{ var avg =100/0; //或者其它要調試的代碼。}catch(e) { alert(e);}沒有console.log我就自製一個。先是用一個文本框用來存放日誌。
  • 分享10個 javascript 在線 debugging 工具
    這裡是10款我們精選的基於瀏覽器的JS在線調試工具,希望大家喜歡!Online Debugging ToolsPastebin是一個協作式的調試工具,幫助你在IRC,IM或者消息版上對話來分享和修改代碼片段
  • 最新的 Javascript 和 CSS 應用技巧薈萃
    隨著前端技術的發展,javascript和css在 網站和web應用中展現出強大的統治力,特別是隨著HTML5和CSS3的標準的成熟,我們可以使用javascript和css開發出你想都沒有想到過
  • 14個你可能不知道的JavaScript調試技巧
    以更快的速度和更高的效率來調試JavaScript。熟悉工具可以讓工具在工作中發揮出更大的作用。儘管江湖傳言 JavaScript 很難調試,但如果你掌握了幾個技巧,就能用很少的時間來解決錯誤和bug.文中已經列出了14個你可能不知道的調試技巧,但是可能需要你牢記在心,以便在下次需要調試JavaScript代碼時使用!1. debugger除了console.log, debugger是我們最喜歡、快速且骯髒的調試工具。執行代碼後,Chrome會在執行時自動停止。
  • 機器人放膜片的調試技巧分享
    最近公司有些用機器人放膜片的項目,調試的過程中出現了很多問題,有些東西跟想像的不一樣。項目背景:用機器人控制臂端具的吸盤,在上料臺上將膜片吸取,然後放入到注塑機模腔內。項目的動作流程和邏輯其實很簡單,主要就難在位置要求精準,而注塑機內的有些空間是看不到的,而且模具的模腔和臂端具都是不規則的,完全只能憑經驗去對位和調試。
  • 經驗分享:C++編程中的四個調試小技巧
    經驗分享:C++編程中的四個調試小技巧 本文介紹的是C++中的一些編程的小技巧,希望對你有幫助,一起來看。作者:佚名來源:網際網路|2011-07-12 13:41 下面介紹C++編程的四個小技巧
  • Visual Studio 調試技巧之即時窗口的妙用
    ,尤其是在調試的時候。下面總結幾個即時窗口的實用技巧。然後在即時窗口編寫調用代碼,它會直接使用當前上下文進行調試。不需要中斷 VS 調試再重新啟動。直接列印是這樣的:結束本文分享的這幾個即時窗口的技巧,在調試時很實用,在工作中我經常使用,希望它也可以幫助你提高開發效率。
  • 關於Scrapy爬蟲項目運行和調試的小技巧(下篇)
    前幾天給大家分享了關於Scrapy爬蟲項目運行和調試的小技巧上篇,沒來得及上車的小夥伴可以戳超連結看一下。今天小編繼續沿著上篇的思路往下延伸,給大家分享更為實用的Scrapy項目調試技巧。
  • 10個基於瀏覽器的javascript在線debugging工具
    10個基於瀏覽器的javascript在線debugging工具 調試Javascript可能是web開發中最讓人鬱悶的事情。所以這裡我們絕定來尋找一些好的工具來幫助大家調試。
  • 超實用的知更鳥主題,文章頁底部百度分享按鈕添加方法
    記:鄭州seo培訓博客上線3天,這三天我都在做著些調試,包括SEO方面的,包括wp模板方便的和begin主題方面的,在這裡博主要反思一下;因為本博主的主題使用的是免費版的,大家都懂的這樣的主題存在的問題就是沒有任何的售後保障(強烈建議大家要保護智慧財產權,尊重原創!),還好博主是有些代碼方面的基礎的,所以在給seo同行的幫助下,這個站點還是很順利的建立起來!
  • ps人像修圖技巧分享,實用的美顏技巧
    我們在實際工作中,我們美化圖片離不開ps,現在的社會,我們基本上都有手機,很多人喜歡自拍或者幫別人拍照,當我們拍照的時候我們習慣性地打開美顏相機,因為愛美之心人皆有之,我們會照片進行美化,今天我們就分享幾個ps人像修圖技巧,對照片人物進行去疤痕、美膚、瘦臉,下面我們就以幾個實例,我們通過視頻的形式將詳細的操作技巧展示出來
  • 前端技巧:Javascript和Css截取字符串的方法比較
    但是這個方式有一個弊端,尤其是響應式的頁面,截取字數無法精確控制,比如pc端可視區域可以顯示150個字符,但是手機端屏幕最多只能顯示20個字符,所以通過後端來控制字符數是非常爛的解決方案,最好的解決辦法是通過前端方式來截斷字符串,下面分別用javascript和css的方式來實現。先看一下html部分<div>為什麼要製作高端的網站?
  • macOS實用技巧分享:Fn鍵的妙用
    macOS的Fn鍵實用技巧,macOS高端使用技巧,不知道大家有沒有發現,不管是Windows筆記本還是Mac都有一個Fn鍵,這個到底有什麼用呢?今天小編就來和大家說說。2、使用Fn鍵來組合鍵可以得到 Home, End, Page UP, Page DOWN 同樣的功能:Home鍵=Fn+左方向End鍵=Fn+右方向PageUP=Fn+上方向PageDOWN=Fn+下方向以上就是小編帶來的「macOS的Fn鍵實用技巧」,小編會持續給給您帶來更多實用技巧。
  • 驅動調試技巧點滴分享
    那就總結一下自己看的代碼的一些感悟和技巧。如何利用你看的這些代碼?如何體現在工作的調試中?作為驅動工程師,主要的工作就是移植各種驅動,接觸各種硬體。接觸最多的就是dts、中斷、gpio、sysfs、proc fs。
  • 《泰拉瑞亞》1.4新手怎麼玩 新手實用技巧分享
    導 讀 泰拉瑞亞1.4實用技巧分享 泰拉瑞亞中有不少隱藏的不容易被廣大玩家發現的技巧,這些技巧都有什麼呢,下面就給大家帶來泰拉瑞亞1.4實用技巧分享,希望對廣大玩家有所幫助
  • 《口袋妖怪日月》孵蛋實用小技巧分享 孵蛋有哪些技巧
    導 讀 《口袋妖怪日月》孵蛋有一些實用的技巧相信很多玩家都不知道,下面小編就為大家帶來《口袋妖怪日月》孵蛋實用小技巧分享,希望對各位玩家有所幫助。