摘要:最常用的語(yǔ)句就是了。對(duì)象除了這一最常被開發(fā)者使用的方法之外,還有很多其他的方法。用來(lái)追蹤函數(shù)的調(diào)用過(guò)程。輸出輸出參數(shù)的內(nèi)容,作為警告提示。支持的占位符有四種,分別是字符整數(shù)或浮點(diǎn)數(shù)和對(duì)象。
對(duì)于前端開發(fā)者來(lái)說(shuō),在開發(fā)過(guò)程中需要監(jiān)控某些表達(dá)式或變量的值的時(shí)候,用 debugger 會(huì)顯得過(guò)于笨重,取而代之則是會(huì)將值輸出到控制臺(tái)上方便調(diào)試。最常用的語(yǔ)句就是console.log(expression)了。
然而對(duì)于作為一個(gè)全局對(duì)象的console對(duì)象來(lái)說(shuō),大多數(shù)人了解得還并不全面,當(dāng)然我也是,經(jīng)過(guò)我的一番學(xué)習(xí),現(xiàn)在對(duì)于這個(gè)能玩轉(zhuǎn)控制臺(tái)的 JS 對(duì)象有了一定的認(rèn)識(shí),想與大家分享一下。
console 對(duì)象除了console.log()這一最常被開發(fā)者使用的方法之外,還有很多其他的方法。靈活運(yùn)用這些方法,可以給開發(fā)過(guò)程增添許多便利。
console 的方法console.assert(expression, object[, object...])
接收至少兩個(gè)參數(shù),第一個(gè)參數(shù)的值或返回值為false的時(shí)候,將會(huì)在控制臺(tái)上輸出后續(xù)參數(shù)的值。例如:
console.assert(1 == 1, object); // 無(wú)輸出,返回 undefined console.assert(1 == 2, object); // 輸出 object
console.count([label])
輸出執(zhí)行到該行的次數(shù),可選參數(shù) label 可以輸出在次數(shù)之前,例如:
(function() { for (var i = 0; i < 5; i++) { console.count("count"); } })(); // count: 1 // count: 2 // count: 3 // count: 4 // count: 5
console.dir(object)
將傳入對(duì)象的屬性,包括子對(duì)象的屬性以列表形式輸出,例如:
var obj = { name: "classicemi", college: "HUST", major: "ei" }; console.dir(obj);
輸出:
console.error(object[, object...])
用于輸出錯(cuò)誤信息,用法和常見(jiàn)的console.log一樣,不同點(diǎn)在于輸出內(nèi)容會(huì)標(biāo)記為錯(cuò)誤的樣式,便于分辨。輸出結(jié)果:
console.group
這是個(gè)有趣的方法,它能夠讓控制臺(tái)輸出的語(yǔ)句產(chǎn)生不同的層級(jí)嵌套關(guān)系,每一個(gè)console.group()會(huì)增加一層嵌套,相反要減少一層嵌套可以使用console.groupEnd()方法。語(yǔ)言表述比較無(wú)力,看代碼:
console.log("這是第一層"); console.group(); console.log("這是第二層"); console.log("依然第二層"); console.group(); console.log("第三層了"); console.groupEnd(); console.log("回到第二層"); console.groupEnd(); console.log("回到第一層");
輸出結(jié)果:
和console.group()相似的方法是console.groupCollapsed()作用相同,不同點(diǎn)是嵌套的輸出內(nèi)容是折疊狀態(tài),在有大段內(nèi)容輸出的時(shí)候使用這個(gè)方法可以使輸出版面不至于太長(zhǎng)。。。吧
console.info(object[, object...])
此方法與之前說(shuō)到的console.error一樣,用于輸出信息,沒(méi)有什么特別之處。
console.info("info"); // 輸出 info
console.table()
可將傳入的對(duì)象,或數(shù)組以表格形式輸出,相比傳統(tǒng)樹形輸出,這種輸出方案更適合內(nèi)部元素排列整齊的對(duì)象或數(shù)組,不然可能會(huì)出現(xiàn)很多的 undefined。
var obj = { foo: { name: "foo", age: "33" }, bar: { name: "bar", age: "45" } }; var arr = [ ["foo", "33"], ["bar", "45"] ]; console.table(obj); console.table(arr);
也可以
console.log(object[, object...])
這個(gè)不用多說(shuō),這個(gè)應(yīng)該是開發(fā)者最常用的吧,也不知道是誰(shuí)規(guī)定的。。。
console.log("log"); // 輸出 log
console.profile([profileLabel])
這是個(gè)挺高大上的東西,可用于性能分析。在 JS 開發(fā)中,我們常常要評(píng)估段代碼或是某個(gè)函數(shù)的性能。在函數(shù)中手動(dòng)打印時(shí)間固然可以,但顯得不夠靈活而且有誤差。借助控制臺(tái)以及console.profile()方法我們可以很方便地監(jiān)控運(yùn)行性能。
例如下面這段代碼:
function parent() { for (var i = 0; i < 10000; i++) { childA() } } function childA(j) { for (var i = 0; i < j; i++) {} } console.profile("性能分析"); parent(); console.profileEnd();
然后我們可以在 Profiles 面板下看到上述代碼運(yùn)行過(guò)程中的消耗時(shí)間。
頁(yè)面加載過(guò)程的性能優(yōu)化是前端開發(fā)的一個(gè)重要部分,使用控制臺(tái)的 profiles 面板可以監(jiān)控所有 JS 的運(yùn)行情況使用方法就像錄像機(jī)一樣,控制臺(tái)會(huì)把運(yùn)行過(guò)程錄制下來(lái)。如圖,工具欄上有錄制和停止按鈕。
錄制結(jié)果:
console.time(name)
計(jì)時(shí)器,可以將成對(duì)的console.time()和console.timeEnd()之間代碼的運(yùn)行時(shí)間輸出到控制臺(tái)上,name參數(shù)可作為標(biāo)簽名。
console.time("計(jì)時(shí)器"); for (var i = 0; i < 1000; i++) { for (var j = 0; j < 1000; j++) {} } console.timeEnd("計(jì)時(shí)器");
(剛才實(shí)際多寫了一層循環(huán),結(jié)果電腦風(fēng)扇嗚嗚轉(zhuǎn)啊,瀏覽器直接無(wú)響應(yīng)了。。。)
console.trace()
console.trace()用來(lái)追蹤函數(shù)的調(diào)用過(guò)程。在大型項(xiàng)目尤其是框架開發(fā)中,函數(shù)的調(diào)用軌跡可以十分復(fù)雜,console.trace()方法可以將函數(shù)的被調(diào)用過(guò)程清楚地輸出到控制臺(tái)上。
function tracer(a) { console.trace(); return a; } function foo(a) { return bar(a); } function bar(a) { return tracer(a); } var a = foo("tracer");
輸出:
console.warn(object[, object...])
輸出參數(shù)的內(nèi)容,作為警告提示。
console.warn("warn"); // 輸出 warn
占位符
console對(duì)象上的五個(gè)直接輸出方法,console.log(),console.warn(),console.error(),console.exception()(等同于console.error())和console.info(),都可以使用占位符。支持的占位符有四種,分別是字符(%s)、整數(shù)(%d 或 %i)、浮點(diǎn)數(shù)(%f)和對(duì)象(%o)。
console.log("%s是%d年%d月%d日", "今天", 2014, 4, 15); console.log("圓周率是%f", 3.14159); var obj = { name: "classicemi" } console.log("%o", obj);
還有一種特殊的標(biāo)示符%c,對(duì)輸出的文字可以附加特殊的樣式,當(dāng)進(jìn)行大型項(xiàng)目開發(fā)的時(shí)候,代碼中可能有很多其他開發(fā)者添加的控制臺(tái)語(yǔ)句。開發(fā)者對(duì)自己的輸出定制特別的樣式就可以方便自己在眼花繚亂的輸出結(jié)果中一眼看到自己需要的內(nèi)容。想象力豐富的童鞋也可以做出有創(chuàng)意的輸出信息,比如常見(jiàn)的招聘信息和個(gè)人介紹啥的。
輸出結(jié)果:
console.log("%cMy name is classicemi.", "color: #fff; background: #f40; font-size: 24px;");
%c標(biāo)示符可以用各種 CSS 語(yǔ)句來(lái)為輸出添加樣式,再隨便舉個(gè)栗子,background屬性的url()中添加圖片路徑就可以實(shí)現(xiàn)圖片的輸出了,各位前端童鞋快施展你們的 CSS 神技來(lái)把控制臺(tái)玩壞吧~~
參考文獻(xiàn)https://developer.mozilla.org/en-US/docs/Web/API/console
http://www.ruanyifeng.com/blog/2011/03/firebug_console_tutorial.html
http://blog.segmentfault.com/civerzhu/1190000000425386
http://blog.mariusschulz.com/2013/11/13/advanced-javascript-debugging-with-consoletable
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/87523.html
摘要:前言相信很多人都對(duì)中的指向問(wèn)題一知半解,所以今天就來(lái)詳細(xì)看看它到底是怎么判斷的。椎確來(lái)說(shuō)是函數(shù)調(diào)用時(shí)是否有引用上下文對(duì)象。隱式綁定,上下文對(duì)象無(wú)上下文對(duì)象顯示綁定這也是常用的的方式就不一一舉例了。 前言 相信很多人都對(duì)JavaScript中的this指向問(wèn)題一知半解,所以今天就來(lái)詳細(xì)看看它到底是怎么判斷的。 一. 先看幾道題 var length = 10; functio...
摘要:表示要解析的數(shù)字的基數(shù)?;卣{(diào)函數(shù)接收四個(gè)參數(shù),依次是通過(guò)上一次調(diào)用回調(diào)函數(shù)獲得的值。如果向方法提供,則在首次調(diào)用函數(shù)時(shí),為。當(dāng)前數(shù)組元素的值。 原題出處:JavaScript Puzzlers!當(dāng)初以為不過(guò)是一些小題目,結(jié)果做到懷疑人生,都要懷疑可能我javascript白學(xué)了。讀者可以去試試。 不多說(shuō),直接上題: 第一題 [1, 2, 3].map(parseInt) 不要被套路,這...
摘要:前言我們知道所謂的閉包指的就是有權(quán)訪問(wèn)另一個(gè)函數(shù)作用域的變量對(duì)象的函數(shù),但是你們真的了解的閉包嗎就當(dāng)你們很了解了,畢竟是基礎(chǔ)知識(shí),我就簡(jiǎn)單說(shuō)說(shuō)概念簡(jiǎn)單幾行代碼,先說(shuō)說(shuō)作用域鏈的流程,運(yùn)行到時(shí),會(huì)將作用域鏈保存到中執(zhí)行到時(shí)會(huì)創(chuàng)建執(zhí)行環(huán)境,并將 前言 我們知道所謂的閉包指的就是有權(quán)訪問(wèn)另一個(gè)函數(shù)作用域的變量對(duì)象的函數(shù),但是你們真的了解JS的閉包嗎?就當(dāng)你們很了解了,畢竟是基礎(chǔ)知識(shí),我就簡(jiǎn)單...
摘要:安裝然后在的配置文件加入入口文件引入這樣就可以啦,還是可以減少很多代碼量的。是參數(shù),等同于執(zhí)行正常。這個(gè)包很簡(jiǎn)單,就是引用了和,然后生產(chǎn)環(huán)境把它們編譯到目錄下,做了映射,供使用。 引入 這個(gè)問(wèn)題是對(duì)自己的發(fā)問(wèn),但我相信會(huì)有很多跟我一樣的同學(xué)。對(duì)于 babel 的使用,近半年來(lái)一直停留在與 webpack 結(jié)合使用,以及在瀏覽器開發(fā)環(huán)境下。導(dǎo)致很多 babel 的包,我都不清楚他們是干嘛...
摘要:異步函數(shù)是值通過(guò)事件循環(huán)異步執(zhí)行的函數(shù),它會(huì)通過(guò)一個(gè)隱式的返回其結(jié)果。 async 異步函數(shù) 不完全使用攻略 前言 現(xiàn)在已經(jīng)到 8012 年的尾聲了,前端各方面的技術(shù)發(fā)展也層出不窮,VueConf TO 2018 大會(huì) 也發(fā)布了 Vue 3.0的計(jì)劃。而在我們(我)的日常中也經(jīng)常用 Vue 來(lái)編寫一些項(xiàng)目。那么,就少不了 ES6 的登場(chǎng)了。那么話說(shuō)回來(lái),你真的會(huì)用 ES6 的 asyn...
閱讀 3169·2021-11-22 15:29
閱讀 1830·2021-10-12 10:11
閱讀 1889·2021-09-04 16:45
閱讀 2441·2021-08-25 09:39
閱讀 2856·2021-08-18 10:20
閱讀 2614·2021-08-11 11:17
閱讀 508·2019-08-30 12:49
閱讀 3389·2019-08-30 12:49