Chrome 控制臺不完全指南

Chrome的開發(fā)者工具已經(jīng)強大到?jīng)]朋友的地步了,特別是其功能豐富界面友好的console贝乎,使用得當可以有如下功效:

  • 更高「逼格」更快「開發(fā)調(diào)試」更強「進階級的Frontender」
  • Bug無處遁形「Console大法好」

console.log

大家都會用log览效,但鮮有人很好地利用console.error , console.warn 等將輸出到控制臺的信息進行分類整理。他們功能區(qū)別不大但校,意義在于將輸出到控制臺的信息進行歸類状囱,或者說讓它們更語義化亭枷。各個所代表的語義如下:

  • console.log:普通信息
  • console.info:提示類信息
  • console.error:錯誤信息
  • console.warn:警示信息

當合理使用上述log方法后奶栖,可以很方便地在控制臺選擇查看特定類型的信息袍镀。

console.log('一顆紅心向太陽','吼吼~');
console.info('樓上藥不能停苇羡!');
console.warn('樓上嘴太賤!');
console.error('樓上關你毛事攘轩?');

如果再配合console.groupconsole.groupEnd歼捏,可以將這種分類管理的思想發(fā)揮到極致瞳秽。這適合于在開發(fā)一個規(guī)模很大模塊很多很復雜的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:第一個參數(shù)可以包含一些格式化的指令比如%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;');

各種招大招的節(jié)奏啊~

看著上面密集的代碼不用驚慌重荠,上面console.log()第二個參數(shù)全是純CSS用來控制樣式的戈鲁,你不會陌生婆殿。而第一個參數(shù)里可以帶用百分號開頭的轉義指令,如上面輸出帶樣式的文字時使用的%c
指令寞缝。更詳細的指令參見官方API文檔的這個表格荆陆。

如果還不夠過癮被啼,那咱們來log一些圖片吧浓体,甚至命浴。。碍讯。動圖捉兴?對,你得先有圖禾乘,我們拿[這張圖]
(http://wayou.github.io/2014/09/10/chrome-console-tips-and-tricks/rabbit.gif)為例。

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
更是直接以表格的形式將數(shù)據(jù)輸出倍踪,不能贊得太多!借用之前寫過的一篇博文里的例子:

var data = [{'品名': '杜雷斯', '數(shù)量': 4}, {'品名': '岡本', '數(shù)量': 3}];
console.table(data);


另外缤至,console.log()接收不定參數(shù)领斥,參數(shù)間用逗號分隔月洛,最終會輸出會將它們以空白字符連接嚼黔。

console.log('%c你好','color:red;','小明','你知道小紅被媽媽打了么');

console.assert

當你想代碼滿足某些條件時才輸出信息到控制臺隔崎,那么你大可不必寫if或者三元表達式來達到目的,cosole.assert
便是這樣場景下一種很好的工具撵彻,它會先對傳入的表達式進行斷言轴合,只有表達式為假時才輸出相應信息到控制臺受葛。
var isDebug=false;console.assert(isDebug,'開發(fā)中的log信息总滩。闰渔。冈涧。');

console.count

除了條件輸出的場景,還有常見的場景是計數(shù)愚隧。當你想統(tǒng)計某段代碼執(zhí)行了多少次時也大可不必自己去寫相關邏輯奸攻,內(nèi)置的console.count可以很地勝任這樣的任務睹耐。

function foo(){ 
    //其他函數(shù)邏輯blah blah硝训。窖梁。。 
    console.count('foo 被執(zhí)行的次數(shù):');
}
foo();
foo();
foo();

console.dir

將DOM結點以JavaScript對象的形式輸出到控制臺而console.log是直接將該DOM結點以DOM樹的結構進行輸出假哎,與在元素審查時看到的結構是一致的舵抹。不同的展現(xiàn)形式扇救,同樣的優(yōu)雅迅腔,各種體位任君選擇反正就是方便與體貼钾挟。

  console.dir(document.body);
  console.log(document.body);

console.time & console.timeEnd

輸出一些調(diào)試信息是控制臺最常用的功能掺出,當然,它的功能遠不止于此百框。當做一些性能測試時柬泽,同樣可以在這里很方便地進行锨并。比如需要考量一段代碼執(zhí)行的耗時情況時第煮,可以用console.timeconsole.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);


相信你也看到了篱瞎,用內(nèi)置的console.time
是多么地方便俐筋,省去了自己寫代碼來計算的工作量澄者。另外值得一提的是,通過調(diào)用內(nèi)置的console.time
得到的結果要比自己手動計算的時間差更精確可靠询筏。

console.profile & console.timeLime

當想要查看CPU使用相關的信息時嫌套,可以使用console.profile配合 console.profileEnd來完成這個需求踱讨。這一功能可以通過UI界面來完成痹筛,Chrome 開發(fā)者工具里面有個tab便是Profile帚稠。與此類似的功能還有console.timeLine配合 console.timeLineEnd,它的作用是開始記錄一段時間軸,同樣可以通過Chrome開發(fā)者工具里的Timeline 標簽來進行相應操作馆衔。所以在我看來這兩個方法有點雞肋角溃,因為都可以通過操作界面來完成减细。但至少他提供了一種命令行方式的交互未蝌,還是多了種姿勢供選擇吧左冬。

console.trace

堆棧跟蹤相關的調(diào)試可以使用console.trace拇砰。這個同樣可以通過UI界面完成除破。當代碼被打斷點后瑰枫,可以在Call Stack面板中查看相關堆棧信息光坝。上面介紹的都是掛在window.console
這個對象下面的方法,統(tǒng)稱為Console API土铺,接下來的這些方法確切地說應該叫命令悲敷,是Chrome內(nèi)置提供后德,在控制臺中使用的瓢湃,他們統(tǒng)稱為Command Line API绵患。

$

似乎美刀總是被程序員及各種編程語言所青睞「你看看PHP代碼就知道PHPer有多愛錢了」,在Chrome的控制臺里筏勒,$用處還真是蠻多且方便的管行。$_
命令返回最近一次表達式執(zhí)行的結果揽咕,功能跟按向上的方向鍵再回車是一樣的,但它可以做為一個變量使用在你接下來的表達式中:

2+2//回車逗柴,再
$_+1//回車得5


上面的$_需要領悟其奧義才能使用得當戏溺,而$0~$4則代表了最近5個你選擇過的DOM節(jié)點。
什么意思讼昆?在頁面右擊選擇審查元素闰围,然后在彈出來的DOM結點樹上面隨便點選羡榴,這些被點過的節(jié)點會被記錄下來校仑,而$0會返回最近一次點選的DOM結點,以此類推涉枫,$1返回的是上上次點選的DOM節(jié)點困后,最多保存了5個摇予,如果不夠5個侧戴,則返回undefined酗宋。

另外值得一贊的是寂曹,Chrome 控制臺中原生支持類jQuery的選擇器隆圆,也就是說你可以用$
加上熟悉的css選擇器來選擇DOM節(jié)點渺氧,多么滴熟悉。

$('body')


$(selector)返回的是滿足選擇條件的首個DOM元素秃踩。剝?nèi)ニ齻紊频耐庖裸狙睿鋵?(selector)是原生JavaScript document.querySelector()的封裝消别。同時另一個命令$$(selector)返回的是所有滿足選擇條件的元素的一個集合,是對document.querySelectorAll()
的封裝蛇券。

$$('div')

copy

通過此命令可以將在控制臺獲取到的內(nèi)容復制到剪貼板塘慕。

copy(document.body)

然后你就可以到處粘了:


看完此條命令行图呢,機智的你是不是跟腦洞全開的我一樣,冒出了這樣一個想法:那就是通過這個命令可以在JavaScript里進行復制操作從而不用依賴Flash插件了鸿染。But現(xiàn)實是殘酷的姚炕,如之前所述的,這里的控制臺命令只能在控制臺中環(huán)境中執(zhí)行播瞳,因為他不依附于任何全局變量比如window赢乓,所以其實在JS代碼里是訪問不了這個copy方法的,所以從代碼層面來調(diào)用復制功能也就無從談起松逊。但愿有天瀏覽器會提供相應的JS實現(xiàn)吧~

keys & values

這是一對基友犀暑。前者返回傳入對象所有屬性名組成的數(shù)據(jù)耐亏,后者返回所有屬性值組成的數(shù)組广辰。具體請看下面的例子:

var tboy={name:'wayou',gender:'unknown',hobby:'opposite to the gender'};
keys(tboy)
;values(tboy);

monitor & unmonitor

monitor(function)李根,它接收一個函數(shù)名作為參數(shù),比如function a,每次a被執(zhí)行了冀续,都會在控制臺輸出一條信息洪唐,里面包含了函數(shù)的名稱a及執(zhí)行時所傳入的參數(shù)凭需。而unmonitor(function)便是用來停止這一監(jiān)聽粒蜈。

function sayHello(name){    
    alert('hello,'+name);
}
monitor(sayHello);
sayHello('wayou');
unmonitor(sayHello);
sayHello('wayou');

debug & undebug

debug同樣也是接收一個函數(shù)名作為參數(shù)。當該函數(shù)執(zhí)行時自動斷下來以供調(diào)試度硝,類似于在該函數(shù)的入口處打了個斷點蕊程,可以通過debugger來做到,同時也可以通過在Chrome開發(fā)者工具里找到相應源碼然后手動打斷點捌治。而undebug
則是解除該斷點肖油。
而其他還有好些命令則讓人沒有說的欲望森枪,因為好些都可以通過Chrome開發(fā)者工具的UI界面來操作并且比用在控制臺輸入要方便县袱。

REFERENCE

Styled console logging in the Chrome DevTools (Canary)
Chrome Console API
Chrome Console Command Line API

轉載自:劉哇勇的部落格

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末筋遭,一起剝皮案震驚了整個濱河市漓滔,隨后出現(xiàn)的幾起案子响驴,更是在濱河造成了極大的恐慌豁鲤,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件日熬,死亡現(xiàn)場離奇詭異耘纱,居然都是意外死亡束析,警方通過查閱死者的電腦和手機弄慰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慌闭,“玉大人,你說我怎么就攤上這事省古。” “怎么了布讹?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我帽馋,道長,這世上最難降的妖魔是什么卖怜? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任马靠,我火速辦了婚禮逞度,結果婚禮上档泽,老公的妹妹穿的比我還像新娘馆匿。我一直安慰自己渐北,他們只是感情好腔稀,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布淡喜。 她就那樣靜靜地躺著,像睡著了一般瘟芝。 火紅的嫁衣襯著肌膚如雪锌俱。 梳的紋絲不亂的頭發(fā)上贸宏,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機與錄音鲫咽,去河邊找鬼分尸。 笑死寓落,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的尖昏。 我是一名探鬼主播抽诉,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼河绽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了苟跪?” 一聲冷哼從身側響起件已,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鉴未,沒想到半個月后歼狼,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體羽峰,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了惰聂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搓幌。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拐揭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情家肯,我是刑警寧澤息楔,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站愿险,受9級特大地震影響辆亏,放射性物質發(fā)生泄漏扮叨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一衷蜓、第九天 我趴在偏房一處隱蔽的房頂上張望磁浇。 院中可真熱鬧,春花似錦缔赠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽行贪。三九已至建瘫,卻和暖如春啰脚,著一層夾襖步出監(jiān)牢的瞬間橄浓,已是汗流浹背荸实。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留圆存,地道東北人沦辙。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像陌兑,于是被迫代替她去往敵國和親兔综。 傳聞我的和親對象是個殘疾皇子软驰,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 前言 Chrome瀏覽器我想是每一個前端er必用工具之一吧,一部分原因是它速度快戴已,體積不大糖儡,支持的新特性也比其它瀏...
    余平的余_余平的平閱讀 405評論 0 1
  • 前言 Chrome瀏覽器我想是每一個前端er必用工具之一吧,一部分原因是它速度快拴疤,體積不大呐矾,支持的新特性也比其它瀏...
    LiLi原上草閱讀 1,282評論 0 0
  • 前言 個人博客:Damonare的個人博客 Chrome瀏覽器我想是每一個前端er必用工具之一吧,一部分原因是它速...
    秦至閱讀 844評論 2 11
  • Chrome 控制臺console的用法 大家都有用過各種類型的瀏覽器罚随,每種瀏覽器都有自己的特色淘菩,本人拙見潮改,在我用...
    灰羽_閱讀 4,775評論 0 1
  • 在做前端開發(fā)時,我們需要用到一些調(diào)試工具用來調(diào)試我們的HTML糕殉、CSS或者JS代碼阿蝶,俗話說預先善其事必先利其器赡磅,這...
    Rella7閱讀 23,932評論 0 15