前言
Chrome瀏覽器我想是每一個前端er必用工具之一吧蚤氏,一部分原因是它速度快踊兜,體積不大捏境,支持的新特性也比其它瀏覽器多,還有一部分我想就是因為它的控制臺功能強大了吧贰剥,說它是神器一點也不過分蚌成,很方便笑陈。但其實很多開發(fā)者并沒有用出控制臺的精髓,只是使用簡單的console.log();其實控制臺功能遠遠不止這么簡單哦乖菱。
console.clear
console.clear();清空控制臺窒所,這個應(yīng)該和console.log知名度一樣高吧吵取。
console.log家族
先簡單介紹一下chrome的控制臺皮官,打開chrome瀏覽器捺氢,按f12就可以輕松的打開控制臺
如果你是一位開發(fā)者摄乒,我想console.log肯定是經(jīng)常使用的了馍佑,我們主要看看console.log的幾個兄弟:
1.console.log ('普通信息')
2.console.info ('提示性信息')
3.console.error ('錯誤信息')
4.console.warn ('警示信息')
大家都會用log拭荤,但很少有人能夠很好地利用console.error穷劈,console.warn 等將輸出到控制臺的信息進行分類整理歇终。他們功能區(qū)別不大评凝,意義在于將輸出到控制臺的信息進行歸類奕短,或者說讓它們更語義化。
如果再配合console.group 與console.groupEnd谬返,可以將這種分類管理的思想發(fā)揮到極致遣铝。這適合于在開發(fā)一個規(guī)模很大模塊很多很復(fù)雜的Web APP時莉擒,將各自的log信息分組到以各自命名空間為名稱的組里面填硕。
console.group("app.bundle");
console.warn("來自bundle模塊的警告信息1");console.warn("來自bundle模塊的警告信息2");
console.groupEnd();
console.group("app.bundle");
console.log("來自bundle模塊的信息1");console.log("來自bundle模塊的信息2");
console.groupEnd();
這樣的控制臺信息看上去就一目了然了鹿鳖,就不用再為了找這是屬于那一行代碼輸出的再翻一遍源碼了翅帜。
另外,console.log家族還給我們提供了一個的API:第一個參數(shù)可以帶一些格式化指令,比如%c,n;看下面這個炫酷的效果:
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;');
當(dāng)然,圖片也是可以的腋妙,讀者可以自行嘗試讯榕,修改上述代碼即可愚屁。
另外送浊,console.log() 接收不定參數(shù)丘跌,參數(shù)間用逗號分隔,最終會輸出會將它們以空白字符連接荒澡。
console.table
看著這種“黑魔法”是不是有種坑分的感覺呢单山,其實還不止哦饥侵!console.table可以讓我們輸出表格,示例:
var data = {code:200,content:[{'品名': '杜雷斯', '數(shù)量': 4}, {'品名': '岡本', '數(shù)量': 3}]};
console.table(data.content);
有的時候后端傳回來一大串?dāng)?shù)據(jù),是不是覺得直接console.log或是通過抓包工具查看都會讓人暈頭轉(zhuǎn)向呢膨疏,這個時候正事console.table發(fā)揮作用的時候了佃却,以表格的形式呈現(xiàn)數(shù)據(jù)窘俺,自然一目了然瘤泪。
console.assert
var isDebug=false;
console.assert(isDebug,'開發(fā)中的log信息对途。。惶洲。');
當(dāng)你想代碼滿足某些條件時才輸出信息到控制臺恬吕,那么你大可不必寫if或者三元表達式來達到目的,cosole.assert便是這樣場景下一種很好的工具,它會先對傳入的表達式進行斷言扛拨,只有表達式為假時才輸出相應(yīng)信息到控制臺绑警。
console.count
除了條件輸出的場景,還有常見的場景是計數(shù)北启。
當(dāng)你想統(tǒng)計某段代碼執(zhí)行了多少次時也大可不必自己去寫相關(guān)邏輯咕村,內(nèi)置的console.count可以很地勝任這樣的任務(wù).
console.dir
將DOM結(jié)點以JavaScript對象的形式輸出到控制臺蚊俺,而console.log是直接將該DOM結(jié)點以DOM樹的結(jié)構(gòu)進行輸出懈涛,與在元素審查時看到的結(jié)構(gòu)是一致的。不同的展現(xiàn)形式泳猬,同樣的優(yōu)雅批钠,各種體位任君選擇反正就是方便與體貼。
console.dir(document.body);
console.log(document.body);
console.time & console.timeEnd
輸出一些調(diào)試信息是控制臺最常用的功能得封,當(dāng)然埋心,它的功能遠不止于此。當(dāng)做一些性能測試時呛每,同樣可以在這里很方便地進行。比如需要考量一段代碼執(zhí)行的耗時情況時坡氯,可以用console.time與 console.timeEnd來做此事晨横。
console.time("Array耗時");
var array= new Array(10000000);
for (var i = array.length - 1; i >= 0; i--) {
array[i] = new Object();
};
console.timeEnd("Array耗時");
當(dāng)想要查看CPU使用相關(guān)的信息時库糠,可以使用console.profile配合 console.profileEnd來完成這個需求。
這一功能可以通過UI界面來完成,Chrome 開發(fā)者工具里面有個tab便是Profile。使用方法和console.time基本一樣,其實time開發(fā)者工具里也有個tab就是timeline。關(guān)于console.prefile博主就不做多余的介紹了。想要做更多了解的讀者可以看這里晤愧。
$
講真舅巷,米國程序員們真的很喜歡money办俊(誰又不是呢)褥芒,看看PHP就知道了寝受,滿屏的$痴怨。而在Chrome的控制臺里乾翔,$用處同樣是蠻多且方便的。
2+2//回車,再
$_+1//回車得5
上面的$_需要領(lǐng)悟其奧義才能使用得當(dāng),而$0~$4則代表了最近5個你選擇過的DOM節(jié)點。
什么意思呢拴念?在頁面右擊選擇審查元素缔俄,然后在彈出來的DOM結(jié)點樹上面隨便點選遏佣,這些被點過的節(jié)點會被記錄下來,而$0會返回最近一次點選的DOM結(jié)點稍刀,以此類推,$1返回的是上上次點選的DOM節(jié)點项炼,最多保存了5個拌禾,如果不夠5個觉痛,則返回undefined棵介。
另外值得一贊的是,Chrome 控制臺中原生支持類jQuery的選擇器亿笤,也就是說你可以用$加上熟悉的css選擇器來選擇DOM節(jié)點,多么滴熟悉剥悟。
$('body');
$$('div');
[圖片上傳中。教藻。轧抗。(12)]
$(selector)返回的是滿足選擇條件的首個DOM元素。
剝?nèi)ニ齻紊频耐庖滦⒆冢鋵?(selector)是原生JavaScript document.querySelector() 的封裝。
同時另一個命令$$(selector)返回的是所有滿足選擇條件的元素的一個集合址芯,是對document.querySelectorAll() 的封裝。
$x(path)
將所匹配的節(jié)點放在一個數(shù)組里返回
$x("http://p");
$x("http://p[a]");
[圖片上傳中季惩。。。(13)]
$x("http://p")匹配所有的p節(jié)點旧巾,$x("http://p[a]");匹配所有子節(jié)點包含a的p節(jié)點
copy
copy(document.body)
然后你就可以Ctrl+v了。
注意:他不依附于任何全局變量比如window痹仙,所以其實在JS代碼里是訪問不了這個copy方法的是尔,所以從代碼層面來調(diào)用復(fù)制功能也就無從談起。但愿有天瀏覽器會提供相應(yīng)的JS實現(xiàn)吧~這樣我們就可以通過js代碼進行復(fù)制操作而不用再依賴Flash插件了开仰。
keys & values
這是一對基友拟枚。前者返回傳入對象所有屬性名組成的數(shù)據(jù),后者返回所有屬性值組成的數(shù)組众弓。具體請看下面的例子:
var tfboy={name:'wayou',gender:'unknown',hobby:'opposite to the gender'};
keys(tfboy);
values(tfboy);
[圖片上傳中恩溅。。谓娃。(14)]
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('damonare');
sayHello('tjz');
unmonitor(sayHello);
[圖片上傳中竹握。。辆飘。(15)]
debug & undebug
debug同樣也是接收一個函數(shù)名作為參數(shù)啦辐。當(dāng)該函數(shù)執(zhí)行時自動斷下來以供調(diào)試,類似于在該函數(shù)的入口處打了個斷點劈猪,可以通過debugger來做到,同時也可以通過在Chrome開發(fā)者工具里找到相應(yīng)源碼然后手動打斷點良拼。而undebug 則是解除該斷點战得。而其他還有好些命令則讓人沒有說的欲望,因為好些都可以通過Chrome開發(fā)者工具的UI界面來操作并且比用在控制臺輸入要方便庸推。
[圖片上傳中常侦。。贬媒。(16)]
參考
Console API文檔聋亡;
Commond API;
Chrome 控制臺不完全指南 – 劉哇勇