Chrome 控制檯不完全指南
Chrome的開發者工具已經強大到沒朋友的地步了,特別是其功能豐富介面友好的console,使用得當可以有如下功效:
- 更高「逼格」更快「開發除錯」更強「進階級的Frontender」
- Bug無處遁形「Console大法好」
console.log
大家都會用log,但鮮有人很好地利用console.error
, console.warn
等將輸出到控制檯的資訊進行分類整理。
他們功能區別不大,意義在於將輸出到控制檯的資訊進行歸類,或者說讓它們更語義化。
各個所代表的語義如下:
console.log
:普通訊息console.info
:提示類資訊console.error
:錯誤資訊console.warn
當合理使用上述log方法後,可以很方便地在控制檯選擇檢視特定型別的資訊。
console.log('一顆紅心向太陽','吼吼~');
console.info('樓上藥不能停!');
console.warn('樓上嘴太賤!');
console.error('樓上關你毛事?');
如果再配合console.group
與console.groupEnd
,可以將這種分類管理的思想發揮到極致。這適合於在開發一個規模很大模組很多很複雜的Web APP時,將各自的log資訊分組到以各自名稱空間為名稱的組裡面。
console.group("app.foo"); console.log("來自foo模組的資訊 blah blah blah..."); console.groupEnd(); console.group("app.bar"); console.log("來自bar模組的資訊 blah blah blah..."); console.groupEnd();
而關於console.log
,早已被玩兒壞了。一切都源於Chrome提供了這麼一個API:第一個引數可以包含一些格式化的指令比如%c
。
比如給hello world
做件漂亮的嫁衣再拉出來見人:
console.log('%chello world','font-size:25px;color:red;');
如果你覺得不夠過癮,那就把你能寫出來的最華麗的CSS樣式都應用上吧,比如漸變。於是你可以得到如下華麗麗的效果:
console.log('%chello world', '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;');
各種招大招的節奏啊~
看著上面密集的程式碼不用驚慌,上面console.log()
第二個引數全是純CSS用來控制樣式的,你不會陌生。而第一個引數裡可以帶用百分號開頭的轉義指令,如上面輸出帶樣式的文字時使用的%c
指令。更詳細的指令參見官方API文件的這個表格。
如果還不夠過癮,那咱們來log一些圖片吧,甚至。。。動圖?
對,你得先有圖,我們拿這張圖為例。
console.log("%c", "padding:50px 300px;line-height:120px;background:url('http://wayou.github.io/2014/09/10/chrome-console-tips-and-tricks/rabbit.gif') no-repeat;");
看著上面搖擺的豆比兔是不是有種抽它一臉的衝動。
除此,console.table
更是直接以表格的形式將資料輸出,不能贊得太多!
借用之前寫過的一篇博文裡的例子:
var data = [{'品名': '杜雷斯', '數量': 4}, {'品名': '岡本', '數量': 3}];
console.table(data);
另外,console.log()
接收不定引數,引數間用逗號分隔,最終會輸出會將它們以空白字元連線。
console.log('%c你好','color:red;','小明','你知道小紅被媽媽打了麼');
console.assert
當你想程式碼滿足某些條件時才輸出資訊到控制檯,那麼你大可不必寫if
或者三元表示式來達到目的,cosole.assert
便是這樣場景下一種很好的工具,它會先對傳入的表示式進行斷言,只有表示式為假時才輸出相應資訊到控制檯。
var isDebug=false;
console.assert(isDebug,'開發中的log資訊。。。');
console.count
除了條件輸出的場景,還有常見的場景是計數。
當你想統計某段程式碼執行了多少次時也大可不必自己去寫相關邏輯,內建的console.count
可以很地勝任這樣的任務。
function foo(){
//其他函式邏輯blah blah。。。
console.count('foo 被執行的次數:');
}
foo();
foo();
foo();
console.dir
將DOM結點以JavaScript物件的形式輸出到控制檯
而console.log
是直接將該DOM結點以DOM樹的結構進行輸出,與在元素審查時看到的結構是一致的。不同的展現形式,同樣的優雅,各種體位任君選擇反正就是方便與體貼。
console.dir(document.body);
console.log(document.body);
console.time & console.timeEnd
輸出一些除錯資訊是控制檯最常用的功能,當然,它的功能遠不止於此。當做一些效能測試時,同樣可以在這裡很方便地進行。
比如需要考量一段程式碼執行的耗時情況時,可以用console.time
與 console.timeEnd
來做此事。
這裡借用官方文件的例子:
console.time("Array initialize");
var array= new Array(1000000);
for (var i = array.length - 1; i >= 0; i--) {
array[i] = new Object();
};
console.timeEnd("Array initialize");
當然,我們也可以選擇自己寫程式碼來計時:
var start=new Date().getTime();
var array= new Array(1000000);
for (var i = array.length - 1; i >= 0; i--) {
array[i] = new Object();
};
console.log(new Date().getTime()-start);
相信你也看到了,用內建的console.time
是多麼地方便,省去了自己寫程式碼來計算的工作量。另外值得一提的是,通過呼叫內建的console.time
得到的結果要比自己手動計算的時間差更精確可靠。
console.profile & console.timeLime
當想要檢視CPU使用相關的資訊時,可以使用console.profile
配合 console.profileEnd
來完成這個需求。
這一功能可以通過UI介面來完成,Chrome 開發者工具裡面有個tab便是Profile
。
與此類似的功能還有console.timeLine
配合 console.timeLineEnd
,它的作用是開始記錄一段時間軸,同樣可以通過Chrome開發者工具裡的Timeline
標籤來進行相應操作。
所以在我看來這兩個方法有點雞肋,因為都可以通過操作介面來完成。但至少他提供了一種命令列方式的互動,還是多了種姿勢供選擇吧。
console.trace
堆疊跟蹤相關的除錯可以使用console.trace
。這個同樣可以通過UI介面完成。當代碼被打斷點後,可以在Call Stack
面板中檢視相關堆疊資訊。
上面介紹的都是掛在window.console
這個物件下面的方法,統稱為Console API,接下來的這些方法確切地說應該叫命令,是Chrome內建提供,在控制檯中使用的,他們統稱為Command Line API。
$
似乎美刀總是被程式設計師及各種程式語言所青睞「你看看PHP程式碼就知道PHPer有多愛錢了」,在Chrome的控制檯裡,$用處還真是蠻多且方便的。
$_
命令返回最近一次表示式執行的結果,功能跟按向上的方向鍵再回車是一樣的,但它可以做為一個變數使用在你接下來的表示式中:
2+2//回車,再
$_+1//回車得5
上面的$_
需要領悟其奧義才能使用得當,而$0~$4則代表了最近5個你選擇過的DOM節點。
什麼意思?在頁面右擊選擇審查元素
,然後在彈出來的DOM結點樹上面隨便點選,這些被點過的節點會被記錄下來,而$0
會返回最近一次點選的DOM結點,以此類推,$1返回的是上上次點選的DOM節點,最多儲存了5個,如果不夠5個,則返回undefined
。
另外值得一讚的是,Chrome 控制檯中原生支援類jQuery的選擇器,也就是說你可以用$
加上熟悉的css選擇器來選擇DOM節點,多麼滴熟悉。
$('body')
$(selector)返回的是滿足選擇條件的首個DOM元素。
剝去她偽善的外衣,其實$(selector)
是原生JavaScript document.querySelector()
的封裝。
同時另一個命令$$(selector)
返回的是所有滿足選擇條件的元素的一個集合,是對document.querySelectorAll()
的封裝。
$$('div')
copy
通過此命令可以將在控制檯獲取到的內容複製到剪貼簿。
copy(document.body)
然後你就可以到處粘了:
看完此條命令列,機智的你是不是跟腦洞全開的我一樣,冒出了這樣一個想法:那就是通過這個命令可以在JavaScript裡進行復制操作從而不用依賴Flash外掛了。
But現實是殘酷的,如之前所述的,這裡的控制檯命令只能在控制檯中環境中執行,因為他不依附於任何全域性變數比如window
,所以其實在JS程式碼裡是訪問不了這個copy
方法的,所以從程式碼層面來呼叫複製功能也就無從談起。但願有天瀏覽器會提供相應的JS實現吧~
keys & values
這是一對基友。前者返回傳入物件所有屬性名組成的資料,後者返回所有屬性值組成的陣列。具體請看下面的例子:
var tboy={name:'wayou',gender:'unknown',hobby:'opposite to the gender'};
keys(tboy);
values(tboy);
monitor & unmonitor
monitor(function),它接收一個函式名作為引數,比如function a
,每次a
被執行了,都會在控制檯輸出一條資訊,裡面包含了函式的名稱a
及執行時所傳入的引數。
而unmonitor(function)便是用來停止這一監聽。
function sayHello(name){
alert('hello,'+name);
}
monitor(sayHello);
sayHello('wayou');
unmonitor(sayHello);
sayHello('wayou');
debug & undebug
debug同樣也是接收一個函式名作為引數。當該函式執行時自動斷下來以供除錯,類似於在該函式的入口處打了個斷點,可以通過debugger來做到,同時也可以通過在Chrome開發者工具裡找到相應原始碼然後手動打斷點。
而undebug
則是解除該斷點。
而其他還有好些命令則讓人沒有說的慾望,因為好些都可以通過Chrome開發者工具的UI介面來操作並且比用在控制檯輸入要方便。
REFERENCE
相關推薦
Chrome 控制檯不完全指南
Chrome的開發者工具已經強大到沒朋友的地步了,特別是其功能豐富介面友好的console,使用得當可以有如下功效: 更高「逼格」更快「開發除錯」更強「進階級的Frontender」 Bug無處遁形「Console大法好」 console.log 大家都會用log,但鮮有人很好地利用console.err
Chrome開發者工具不完全指南(四、效能進階篇)
前言 Profiles面板功能的作用主要是監控網頁中各種方法執行時間和記憶體的變化,簡單來說它就是Timeline的數字化版本。它的功能選項卡不是很多(只有三個),操作起來比較前面的幾塊功能版本來說簡單,但是裡面的資料確很多,很雜,要弄懂它們需要花費一些時間。尤其是在記憶體快照中的各種龐雜的資料。在這篇
Chrome開發者工具不完全指南(五、移動篇)
前面介紹了Chrome開發者工具的大部分內容工具,現在介紹最後兩塊功能Audits和Console面板。一、Audits Audits面板會針對目前網頁提出若干條優化的建議,這些建議分為兩大類,一類是網路載入效能,另一類是介面效能。首先開下它的主介面。 Audits面板的網路優化建議參照的是雅虎前端工
Chrome開發者工具不完全指南(一、基礎功能篇)
就算你不是一名前端開發工程師,相信你也不會對Chrome瀏覽器感到陌生。根據最新的一份(2015/06)的瀏覽器市場佔有率報告,Chrome近乎佔有瀏覽器天下的半壁江山。簡單、快捷使它成為了新時代人們的新寵。如果你是一名web開發人員,我推薦你使用Chrome。作為前端開發的"IDE",你只需要搭配一個編
Chrome開發者工具不完全指南:(三、效能篇)
<!DOCTYPE html> <html> <head> <title></title> <style type="text/css"> div{ height: 20px; widows: 20p
Chrome開發者工具不完全指南(二、進階篇)
function a () { b(); } function b() { c(); } function c() { //在該處斷點,檢視call stack } a->b->c. call stack 從上到下的順序就是 c
Laravel(PHP)使用Swagger生成API文件不完全指南 - 基本概念和環境搭建 - 簡書
在PHPer中,很多人聽說過Swagger,部分人知道Swagger是用來做API文件的,然而只有少數人真正知道怎麼正確使用Swagger,因為PHP界和Swagger相關的資料實在是太少了。所以鄙人斗膽一試,希望能以本文幫助到大家瞭解Swagger,從此告別成天用Word、Markdown折騰API文件的日
Laravel(PHP)使用Swagger生成API文檔不完全指南 - 基本概念和環境搭建 - 簡書
function 閱讀 編程語言 文字 formdata 自動 tom dev 開始 在PHPer中,很多人聽說過Swagger,部分人知道Swagger是用來做API文檔的,然而只有少數人真正知道怎麽正確使用Swagger,因為PHP界和Swagger相關的資料實在是太少
Bullet物理引擎不完全指南 Bullet Physics Engine not complete Guide
前言 Bullet據稱為遊戲世界佔有率為第三的物理引擎,也是前幾大引擎目前唯一能夠找到的支援iPhone,開源,免費(Zlib協議,非常自由,且商業免費)的物理引擎,但是文件資料並不是很好,Demo雖然多,但是主要出於特性測試/展示的目的,會讓初學者無從看起,一頭霧水。我
高效使用Pycharm不完全指南
定位 Search EverywhereCtrl+游標最近開啟的檔案目錄樹的“雷達”查詢補全 Tab萬能的Alt-EnterSurroud withEmmet編輯 BasicExtend Select
ctf工具不完全指南
最近接連趕上了ssctf和hctf,對我來說算是一償夙願,總算從在網站上做做以前的題,到參加比賽,正式邁入圈內了。雖然學校內的氛圍不濃厚,但總算也能拉起一支能參賽的隊伍,第一次正式參賽的結果算是讓我挺滿意的。戰後是時候來個總結了。 經驗上的差距讓一些本來可以做的題目也
Apache Kylin 部署之不完全指南
1. 引言 Apache Kylin(麒麟)是由eBay開源的分散式分析引擎,提供Hadoop之上的SQL查詢介面及多維分析(OLAP)能力以支援超大規模資料。底層儲存用的是HBase,資料輸入與cube building用的是Hive,中間資料儲存用的是HDFS。搭建環境: Kylin version =
JNI不完全指南
JNI不完全指南 1.概述 JNI做為對JVM的補充,可以完成一些遊離於JVM之外的程式碼,完成一些OS嚴重依賴的功能,比如你想自己實現基於IMCP的ping(如果問為什麼,那麼請重新學習一下IP/TCP/Socket)。 JNI包括Java程式碼和Native程式碼,所謂的
webpack優化不完全指南
基礎篇 最基本的一個webpack配置 const webpack = require('webpack'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const ExtractTextPlugin = require('extra
前端除錯必備技巧(控制檯使用完全指南)
http://www.w3cplus.com/tools/chrome-devtools-console.html?utm_source=tuicool&utm_medium=referral 瞭解如何:開啟 DevTools 控制檯;堆疊冗餘訊息或將其顯示在各
不完全指南:程式設計師怎麼找海外工作
本文主要針對程式設計師群體,希望提供一些尋找海外工作機會的建議。 留學籤,工作籤還是技術移民? 想要合法地離開中國抵達海外長期生活,不外乎三種途徑: 留學簽證 工作簽證 技術移民 一一瞭解上面這些途徑的基本資訊,然後結合你自身情況,相信可以做出合適的後續規劃。至於做功課的難度,應該不會超
OpenResty 不完全指南
作者 | 黃超 杏仁運維工程師,關注容器技術和自動化運維。OpenResty 簡介Open
Android程式設計規範不完全指南
1. 命名規則 1.1 類名,介面名: 以大寫開頭,如果一個類的類名由多個單片語成,所有單詞的首字母必須大寫,單詞儘量寫全稱,不要簡寫,除非約定俗成的名字,例如:URL,RTMP,RTSP 這些廣泛使用的專有名詞,可以全部大寫,也可以首字母大寫。 例如:HttpRe
前端效能優化不完全指南
開發十年,就只剩下這套架構體系了! >>>
重構不完全指南!
首發公眾號《andyqian》,期待你的關注! 前言 程式設計師在職業生涯中,不可避