前端中的JS使用調(diào)試技巧
掌握各種js調(diào)試技巧,在前端開發(fā)中降低開發(fā)成本,起到事半功倍的效果。譬如,快速定位問題、降低故障概率、幫助分析邏輯錯誤等等。多數(shù)瀏覽器都提供了DevTools 供我們調(diào)試 JavaScript 應(yīng)用程序,并且它們的使用方式類似,只要我們學(xué)會了如何在一個瀏覽器上使用調(diào)試工具,就很容易在其他瀏覽器上使用它。
Alert調(diào)試
通過內(nèi)置于Window對象中的alert方法來調(diào)試,相信這個大家肯定都知道,可以一行一行的進行判斷,是否走到此處。alert的調(diào)試方式很原始,它會阻塞UI和javascript的執(zhí)行,必須點擊'OK'按鈕才能繼續(xù),非常低效。
Console
瀏覽器相繼推出了JS調(diào)試控制臺,支持使用類似"console.log(xxxx)"的形式,在控制臺打印調(diào)試信息,而不直接影響頁面顯示。
JS斷點調(diào)試
JS斷點調(diào)試,即是在瀏覽器開發(fā)者工具中為JS代碼添加斷點,讓JS執(zhí)行到某一特定位置停住,方便開發(fā)者對該處代碼段的分析與邏輯處理。為了能夠觀察到斷點調(diào)試的效果,我們預(yù)先隨意準備一段JS代碼:
3.1、Sources斷點
首先,測試代碼中我們通過上圖console的輸出結(jié)果可以看出代碼應(yīng)該是正常運行了,但是為什么是應(yīng)該呢?因為函數(shù)中加了一個隨機數(shù),而最終結(jié)果是否真的是正確的呢?這是毫無意義的猜想,但是假設(shè)我現(xiàn)在就是要驗證一下:函數(shù)傳入的兩個數(shù)、被加的隨機數(shù),以及最終的總和。那么該怎么操作呢?
方法一,前面講過最普通的,無論使用alert還是console,我們可以這么來驗證:
方法二,方法一的驗證過程存在很明顯的弊端就是,添加了很多冗余代碼,接下來我們看一下使用斷點進行驗證,是否更加方便,先看一個如何加斷點,以及斷點后是什么效果:
如圖,給一段代碼添加斷點的流程是"F12(Ctrl + Shift + I)打開開發(fā)工具"——"點擊Sources菜單"——"左側(cè)樹中找到相應(yīng)文件"——"點擊行號列"即完成在當(dāng)前行添加/刪除斷點操作。當(dāng)斷點添加完畢后,刷新頁面JS執(zhí)行到斷點位置停住,在Sources界面會看到當(dāng)前作用域中所有變量和值,只需對每個值進行驗證即可完成我們題設(shè)驗證要求。
那問題來了,仔細的朋友會發(fā)現(xiàn)當(dāng)我的代碼執(zhí)行到斷點的時候,顯示的變量a和b的值是已經(jīng)進行過加法運算后的,我們看不到調(diào)用sum函數(shù)時初始傳入的10和20。那么該怎么辦呢?這就要回過頭來先學(xué)習(xí)一下斷點調(diào)試的一些基礎(chǔ)知識了。我們打開Sources面板后其實會在界面中看到如下內(nèi)容,我們跟著鼠標軌跡逐一看看都是什么意思:
從左到右,各個圖標表示的功能分別為:
- Pause/Resume script execution:暫停/恢復(fù)腳本執(zhí)行(程序執(zhí)行到下一斷點停止)。
- Step over next function call:執(zhí)行到下一步的函數(shù)調(diào)用(跳到下一行)。
- Step into next function call:進入當(dāng)前函數(shù)。
- Step out of current function:跳出當(dāng)前執(zhí)行函數(shù)。
- Deactive/Active all breakpoints:關(guān)閉/開啟所有斷點(不會取消)。
- Pause on exceptions:異常情況自動斷點設(shè)置。
到此,斷點調(diào)試的功能鍵介紹得差不多了,接下來我們就可以一行一行去看我們的程序代碼,查看每一行執(zhí)行完畢之后,我們各個變量的變化情況了
如上,我們可以看到a、b變量從最初值,到中間加上隨機值,再到最后計算總和并輸出最終結(jié)果的整個過程,完成題設(shè)驗證要求不在話下。
其余幾個功能鍵,我們稍微改動一下我們的測試代碼,用一張gif圖來演示他們的使用方法:
這里需要注意一點,直接在代碼區(qū)打印變量值的功能是在較新版本的Chrome瀏覽器中才新增的功能,如果你還在使用較老版本的Chrome瀏覽器,可能無法直接在斷點的情況下查看變量信息,此時你可以將鼠標移動到變量名上短暫停頓則會出現(xiàn)變量值。也可以用鼠標選中變量名稱,然后右鍵"Add to watch"在Watch面板查看,此方法同樣適用于表達式。此外,你還可以在斷點情況下,切換到Console面板,直接在控制臺輸入變量名稱,回車查看變量信息。該部分比較簡單,考慮篇幅問題,不在做圖演示。
3.2、Debugger斷點
所謂的Debugger斷點,其實是我自己給它命名的,專業(yè)術(shù)語我也不知道怎么說。具體的說就是通過在代碼中添加"debugger;"語句,當(dāng)代碼執(zhí)行到該語句的時候就會自動斷點。接下去的操作就跟在Sources面板添加斷點調(diào)試幾乎一模一樣,唯一的區(qū)別在于調(diào)試完后需要刪除該語句。
既然除了設(shè)置斷點的方式不一樣,功能和Sources面板添加斷點效果一樣,那么為什么還會存在這種方式呢?我想原因應(yīng)該是這樣的:我們在開發(fā)中偶爾會遇到異步加載html片段(包含內(nèi)嵌JS代碼)的情況,而這部分JS代碼在Sources樹種無法找到,因此無法直接在開發(fā)工具中直接添加斷點,那么如果想給異步加載的腳本添加斷點,此時"debugger;"就發(fā)揮作用了。我們直接通過gif圖看看他的效果:
總結(jié)
調(diào)試,是在項目開發(fā)中非常重要的環(huán)節(jié),不僅可以幫助我們快速定位問題,還能節(jié)省我們的開發(fā)時間。熟練掌握各種調(diào)試手段,定當(dāng)為你的職業(yè)發(fā)展帶來諸多利益,但是,在如此多的調(diào)試手段中,如何選擇一個適合自己當(dāng)前應(yīng)用場景的,這需要經(jīng)驗,需要不斷嘗試積累。
到此這篇關(guān)于前端中的JS使用調(diào)試技巧的文章就介紹到這了,更多相關(guān)JS調(diào)試技巧內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS事件循環(huán)機制event loop宏任務(wù)微任務(wù)原理解析
這篇文章主要介紹了JS事件循環(huán)機制event loop宏任務(wù)微任務(wù)原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08jQuery及JS實現(xiàn)循環(huán)中暫停的方法
這篇文章主要介紹了jQuery及JS實現(xiàn)循環(huán)中暫停的方法,以實例形式分析了循環(huán)中暫停的原理及實現(xiàn)技巧,非常具有實用價值,需要的朋友可以參考下2015-02-02使用layui實現(xiàn)樹形結(jié)構(gòu)的方法
今天小編就為大家分享一篇使用layui實現(xiàn)樹形結(jié)構(gòu)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09Javascript對象中關(guān)于setTimeout和setInterval的this介紹
Javascript對象中關(guān)于setTimeout和setInterval的this介紹,需要的朋友可以參考下2012-07-07JavaScript eval() 函數(shù)介紹及應(yīng)用示例
eval(String) 函數(shù)可計算某個字符串,并執(zhí)行其中的的 JavaScript 代碼,該方法只接受原始字符串作為參數(shù)2014-07-07