你們都有用過各類類型的瀏覽器,每種瀏覽器都有本身的特點,本人拙見,在我用過的瀏覽器當中,我是最喜歡Chrome的,由於它對於調試腳本及前端設計調試都有它比其它瀏覽器有過之而無不及的地方。可能你們對console.log會有必定的瞭解,內心不免會想調試的時候用alert不就好了,幹嗎還要用console.log這麼一長串的字符串來替代alert輸出信息呢,下面我就介紹一些調試的入門技巧,讓你愛上console.logcss
先的簡單介紹一下chrome的控制檯,打開chrome瀏覽器,按f12就能夠輕鬆的打開控制檯html
你們能夠看到控制檯裏面有一首詩還有其它信息,若是想清空控制檯,能夠點擊左上角那個來清空,固然也能夠經過在控制檯輸入console.clear()來實現清空控制檯信息。以下圖所示前端
如今假設一個場景,若是一個數組裏面有成百上千的元素,可是你想知道每一個元素具體的值,這時候想一想若是你用alert那將是多慘的一件事情,由於alert阻斷線程運行,你不點擊alert框的肯定按鈕下一個alert就不會出現。java
下面咱們用console.log來替換,感覺一下它的魅力。node
在console面板中輸入命令時,可使用Shift+Enter換行,Tab鍵來自動補全web
看了上面這張圖,是否是認識到log的強大之處了,下面咱們來看看console裏面具體提供了哪些方法能夠供咱們平時調試時使用。ajax
一、先說一下源碼定位chrome
你們打開測試網頁 看到頁面右下方有一個推薦的圖標嗎?右擊推薦圖標,選擇審查元素,打開谷歌控制檯,以下圖所示api
咱們如今想知道votePost方法到底在哪?跟着我這樣作,在Console面板裏面輸入votePost而後回車
直接點擊上圖標紅的連接,控制檯將定位到Sources面板中,展現以下圖所示
你們看了上面這個圖片以後估計頭都要暈了吧,這麼多js都整在一行,讓人怎麼看呀,不用擔憂,按下圖操做便可(也就是點擊中間面板左下方的Pretty print就好了)
這時咱們再回到Console面板時會驚奇的發現原來的連接後面的1如今變成91了(其實這裏的數字1或者91就是表明votePost方法在源碼中的行號 )如今看出Pretty print按鈕的強大之處了吧
知道了怎麼樣查看某一個按鈕的源碼,那接下來的工做即是調試了,調試第一步須要作的即是設置斷點,其實設置斷點很簡單,點擊一下上圖所示的92便可,這時你會發現92行號旁邊會多了一個圖標,這裏解釋一下爲何不在91處設置斷點,你能夠試下,事實上根本就無法在91處上設置斷點,由於它是函數的定義處,因此無法在此設置斷點。
設置好了斷點後,你就會在右邊Breakpoints方框裏看到剛剛設置的斷點。
咱們先來介紹一下用到的調試快捷鍵吧(事實上咱們也能夠不用下表所示的快捷鍵,直接點擊上圖所示右側欄最上層的一排按鈕來進行調試,具體用哪一個按鈕,把鼠標放到按鈕上方一會就會顯示它相應的提示)
快捷鍵 | 功能 |
---|---|
F8 | 恢復運行 |
F10 | 步過,遇到自定義函數也當成一個語句執行,而不會進入函數內部 |
F11 | 步入,遇到自定義函數就跟入到函數內部 |
Shift + F11 | 步出,跳出當前自定義函數 |
其中值得一提的是,當咱們點擊「推薦」按鈕進行調試的時候會發現,無論咱們是按的F10進行調試仍是按F11進行逐步調試,都無法進行$.ajax函數內部,即便咱們在函數內部設置了斷點也沒有辦法進入,這裏按F8纔是真正起效果的,不信你試試。
當咱們在調試的時候,右側Scope Variables裏面會顯示當前做用域以及他的父級做用域,以及閉包。你不只能在右側 Scope Variables(變量做用域) 一欄處看到當前變量,並且還能把鼠標直接移到任意變量上,就能夠查看該變量的值。
用圖說話(哈哈)
剛剛咱們介紹的只是在html裏面可以看獲得它綁定了onclick事件,這樣咱們就找到它綁定的js函數,若是它是在jQuery頁面加載完成函數裏面綁定的,這時候咱們怎麼知道它綁定的是哪一個js函數呢,若是咱們不知道綁定的js函數就更加不用說調試進去了
下面介紹一下如何查看,仍是以剛剛那個測試網頁爲例子吧,可是此次咱們來看「提交評論」做說明吧,
右擊「提交評論」-->審覈元素,咱們能夠清楚的看到在這個按鈕上未綁定任何事件。在Console面板內輸入以下代碼
function lookEvents (elem) { return $.data ? $.data( elem, "events", undefined, true ) : $._data( elem, "events" ); } var event = lookEvents($("#btn_comment_submit")[0]); // 獲取綁定的事件
以下圖所示:
按照上述介紹的方法定位到具體的blog-common.js裏面,找到postComment 而後一層層的找到具體的代碼,再設置斷點就行了。
最後介紹一下一個神器,很好用的debugger
若是你本身寫的代碼,你執行的時候想讓它在某一處停下來,只要寫上的debugger就行了,不信你試試!哈哈
要想打開谷歌控制檯,有兩種方式
你們知道Elements面板最大的功能就是操做屬性和修改html。這裏我再說一些你們可能不太熟悉的特性,
這些功能是我以爲最有意思的,大家能夠試試哦。
下面來具體說說幾個複雜點的功能
能夠經過 ctrl + z 取消
目前控制檯方法和屬性有:
["$$", "$x", "dir", "dirxml", "keys", "values", "profile", "profileEnd", "monitorEvents", "unmonitorEvents", "inspect", "copy", "clear", "getEventListeners", "undebug", "monitor", "unmonitor", "table", "$0", "$1", "$2", "$3", "$4", "$_"]
下面咱們來一一介紹一下各個方法主要的用途。
通常狀況下咱們用來輸入信息的方法主要是用到以下四個
用於輸出普通訊息
用於輸出提示性信息
用於輸出錯誤信息
用於輸出警示信息
用於輸出調試信息
用圖來講話
console對象的上面5種方法,均可以使用printf風格的佔位符。不過,佔位符的種類比較少,只支持字符(%s)、整數(%d或%i)、浮點數(%f)和對象(%o)四種。
格式化符號 | 實現的功能 |
---|---|
%s | 格式化成字符串輸出 |
%d or %i | 格式化成數值輸出 |
%f | 格式化成浮點數輸出 |
%o | 轉化成展開的DOM元素輸出 |
%O | 轉化成JavaScript對象輸出 |
%c | 把字符串按照你提供的樣式格式化後輸入 |
console.log("%d年%d月%d日",2011,3,26); console.log("圓周率是%f",3.1415926);
%o佔位符,能夠用來查看一個對象內部狀況
var dog = {}; dog.name = "大毛"; dog.color = "黃色"; console.log("%o", dog);
下面重點說一下console.log的一些技巧
一、重寫console.log 改變輸出文字的樣式
console.log("%c3D Text"," text-shadow: 0 1px 0 #ccc,0 2px 0 #c9c9c9,0 3px 0 #bbb,0 4px 0 #b9b9b9,0 5px 0 #aaa,0 6px 1px rgba(0,0,0,.1),0 0 5px rgba(0,0,0,.1),0 1px 3px rgba(0,0,0,.3),0 3px 5px rgba(0,0,0,.2),0 5px 10px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.2),0 20px 20px rgba(0,0,0,.15);font-size:5em");
console.log('%cRainbow Text ', 'background-image:-webkit-gradient( linear, left top, right top, color-stop(0, #f22), color-stop(0.15, #f2f), color-stop(0.3, #22f), color-stop(0.45, #2ff), color-stop(0.6, #2f2),color-stop(0.75, #2f2), color-stop(0.9, #ff2), color-stop(1, #f22) );color:transparent;-webkit-background-clip: text;font-size:5em;');
輸出的結果以下圖所示:
二、利用控制檯輸出圖片
三、指定輸出文字的樣式
用來顯示網頁的某個節點(node)所包含的html/xml代碼
<body> <table id="mytable"> <tr> <td>A</td> <td>A</td> <td>A</td> </tr> <tr> <td>bbb</td> <td>aaa</td> <td>ccc</td> </tr> <tr> <td>111</td> <td>333</td> <td>222</td> </tr> </table> </body> <script type="text/javascript"> window.onload = function () { var mytable = document.getElementById('mytable'); console.dirxml(mytable); } </script>
>輸出一組信息的開頭和輸出結束一組輸出信息
看你需求選擇不一樣的輸出方法來使用,若是上述四個方法再配合group和groupEnd方法來一塊兒使用就能夠輸入各類各樣的不一樣形式的輸出信息。
哈哈,是否是以爲很神奇呀!
對輸入的表達式進行斷言,只有表達式爲false時,才輸出相應的信息到控制檯
(這個方法很是實用哦)當你想統計代碼被執行的次數
(這個方法是我常用的 可不知道比for in方便了多少) 直接將該DOM結點以DOM樹的結構進行輸出,能夠詳細查對象的方法發展等等
計時開始和計時結束(看了下面的圖你瞬間就感覺到它的厲害了)
配合一塊兒使用來查看CPU使用相關信息
在Profiles面板裏面查看就能夠看到cpu相關使用信息
配合一塊兒記錄一段時間軸
堆棧跟蹤相關的調試
上述方法只是我我的理解罷了。若是想查看具體API,能夠上官方看看,具體地址爲:https://developer.chrome.com/devtools/docs/console-api
下面介紹一下控制檯的一些快捷鍵
你們一用就知曉。好比用上鍵就至關於使用上次在控制檯的輸入符號
命令返回最近一次表達式執行的結果,功能跟按向上的方向鍵再回車是同樣的
上面的$_
須要領悟其奧義才能使用得當,而$0~$4則表明了最近5個你選擇過的DOM節點。
什麼意思?在頁面右擊選擇審查元素
,而後在彈出來的DOM結點樹上面隨便點選,這些被點過的節點會被記錄下來,而$0
會返回最近一次點選的DOM結點,以此類推,$1返回的是上上次點選的DOM節點,最多保存了5個,若是不夠5個,則返回undefined
。
$ // 簡單理解就是 document.querySelector 而已。 $$ // 簡單理解就是 document.querySelectorAll 而已。 $_ // 是上一個表達式的值 $0-$4 // 是最近5個Elements面板選中的DOM元素,待會會講。 dir // 其實就是 console.dir keys // 取對象的鍵名, 返回鍵名組成的數組 values // 去對象的值, 返回值組成的數組
看一下chrome控制檯一個簡單的操做,如何查看頁面元素,看下圖就知道了
你在控制檯簡單操做一遍就知道了,是否是以爲很簡單!
也就是說你能夠用$
加上熟悉的css選擇器來選擇DOM節點
經過此命令能夠將在控制檯獲取到的內容複製到剪貼板(若是在elements面板中選中某個節點,也能夠直接按ctrl+c執行復制操做)
(哈哈 剛剛從控制檯複製的body裏面的html能夠任意粘貼到哪 好比記事本 是否是以爲功能很強大)
前者返回傳入對象全部屬性名組成的數據,後者返回全部屬性值組成的數組
monitor(function),它接收一個函數名做爲參數,好比function a
,每次a
被執行了,都會在控制檯輸出一條信息,裏面包含了函數的名稱a
及執行時所傳入的參數。
而unmonitor(function)即是用來中止這一監聽。
看了這張圖,應該明白了,也就是說在monitor和unmonitor中間的代碼,執行的時候會在控制檯輸出一條信息,裏面包含了函數的名稱a
及執行時所傳入的參數。當解除監視(也就是執行unmonitor時)就再也不在控制檯輸出信息了。
格式化符號 | 實現的功能 |
---|---|
%s | 格式化成字符串輸出 |
%d or %i | 格式化成數值輸出 |
%f | 格式化成浮點數輸出 |
%o | 轉化成展開的DOM元素輸出 |
%O | 轉化成JavaScript對象輸出 |
%c | 把字符串按照你提供的樣式格式化後輸入 |
說了上面一堆公式,仍是舉個例子讓你印象深入一些,哈哈。
在控制檯輸入以下代碼
console.log("%c3D Text"," text-shadow: 0 1px 0 #ccc,0 2px 0 #c9c9c9,0 3px 0 #bbb,0 4px 0 #b9b9b9,0 5px 0 #aaa,0 6px 1px rgba(0,0,0,.1),0 0 5px rgba(0,0,0,.1),0 1px 3px rgba(0,0,0,.3),0 3px 5px rgba(0,0,0,.2),0 5px 10px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.2),0 20px 20px rgba(0,0,0,.15);font-size:5em");
console.log('%cRainbow Text ', 'background-image:-webkit-gradient( linear, left top, right top, color-stop(0, #f22), color-stop(0.15, #f2f), color-stop(0.3, #22f), color-stop(0.45, #2ff), color-stop(0.6, #2f2),color-stop(0.75, #2f2), color-stop(0.9, #ff2), color-stop(1, #f22) );color:transparent;-webkit-background-clip: text;font-size:5em;');
輸出的結果以下圖所示:
http://www.cnblogs.com/liyunhua/p/4529079.html