摘要:各個消息作為字串的對象。借助控制臺以及方法我們可以很方便地監控運行性能。
console.log() 基本用法
console.log,前端常用它來調試分析代碼,你可以在任何的js代碼中調用console.log(),然后你就可以在瀏覽器控制臺看到你剛才打印的常量,變量,數組,對象,表達式等的值。
首先看最基本的用法:
console.log("123"); // 123 console.log("1", "2", "3"); // 1 2 3 console.log("1 2 3 "); // 1 // 2 // 3
我們可以通過上面的方式進行單個變量(表達式)、多個變量以及換行輸出。而這對于日常開發的大多數情況算是夠用了。
格式化輸出console.log("%d + %d = %d", 1, 1, 2); // 1 + 1 = 2
寫過C語言的童鞋肯定對上面這種寫法不陌生,這種寫法在復雜的輸出時,能保證模板和數據分離,結構更加清晰。不過簡單的輸出就不那么方便了。
console.log支持的格式標志有:
前三種格式不用多說,%o、%O都是用來輸出Object對象的,對普通的Object對象,兩者沒區別,但是打印dom節點時就不一樣了:
使用%o輸出和不使用格式化輸出打印出來的結果一樣,你可以查看這個dom節點的內容、子節點等;而使用%O,你看到的則是該dom節點各個對象屬性。對應我們平時把數據寄放到dom節點的兩種方式:
BTW,格式化輸出還可以和普通輸出混合著來:
console.log("%d + %d =", 1, 1, 2); // 1 + 1 = 2豐富樣式輸出
我們可以使用%c進行css樣式格式化輸出。常見的富樣式輸出有兩種:文字樣式、圖片輸出。
文字樣式
console.log("%c這是一段神奇的文字","color:red;font-size:40px;text-shadow:1px 1px 1px #ccc")
結果如下截圖:
圖片輸出
console.log("%c","background:url(https://www.baidu.com/img/bd_logo1.png) no-repeat;padding:50px;line-height:50px;height:1px;");
結果如圖所示:
嚴格來講,console.log不支持直接圖片輸出,但我們可以用背景圖曲線救國。但,你真正去試了才發現沒那么簡單,你沒法像平時那樣輸出背景圖,原因呢,就是你沒法直接設置width和height樣式。
谷歌51版本的瀏覽器現在不支持了,上面寫法說明下:
line-height的值我取圖片高度
background就不需多說,但你會發現no-repeat設置了沒生效。。。
padding左右兩邊的值顯然是圖片寬度的一半
padding上下的值,需要通過調試達到你想要的輸出效果即可。
關于富樣式輸出說了這么多,現在不得不提下瀏覽器兼容性:
但是現在新版的經過測試感覺也不支持圖片輸出了。如果你調試有輸出,請留言告知下你的版本。
兄弟姐妹console.log("log"); console.debug("debug"); console.warn("warn"); console.error("error");
結果如圖所示:
他們之間的區別就是樣式不同,功能不同。
console.error這里說下console.error,我們使用它做輸出除了可以輸出錯誤信息外,還可以輸出調用這個函數的一瞬間的調用棧!這無疑給我們調試帶來很多方便(當然你也可以用js斷點一步步跟蹤),而這是console.log所不具備的。除了console.error,還有一個函數console.trace也可以打印出調用一瞬間的調用棧,不過它的輸出樣式和位置就跟console.log一樣。
例如:
function fun(){ return "abc"; } var result = fun(); console.trace(result); //abc console.log(result); //abc
結果如圖所示:
其實這一系還有函數:
/ 等價 console.log("%o", document.body); console.log(document.body); // 等價 console.log("%O", document.body); console.dir(document.body);
這兒說下console.dir()
console.dirfunction cat(name, age, score){ this.name = name; this.age = age; this.score = score; } var c = new cat("miao", 2, [6,8,7]); console.dir(c);
通過使用console.dir(),新建的cat對象信息在控制臺被打印出來了。這個在IE低版本瀏覽器中是很有用的。
console.table可將傳入的對象,或數組以表格形式輸出,相比傳統樹形輸出,這種輸出方案更適合內部元素排列整齊的對象或數組,不然可能會出現很多的 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還有不少強大有用但卻很低調的接口。
console.time & console.timeEnd這是性能調試的利器。使用方式如下:
function cat(name, age, score){ this.name = name; this.age = age; this.score = score; } console.time("time"); var c = new cat("miao", 2, [6,8,7]); console.timeEnd("time"); //time: 0.117ms
來得到某塊代碼執行的時間。
console.count這是一個計數器,我們可以傳個名字給它,如a,然后每次調用console.count("a")(可以在不同函數不同地方),它就能打印出這樣一個調用執行了多少次:
var a = function(){ console.count("執行次數打印"); } var b = function(){ a(); } var c = function(){ b(); } b(); c();
得到結果如圖所示:
這個函數特別適用于在一些復雜的場景,有時一個函數被多個地方調用到,而我們想知道該函數是否少調用或重復調用,此時使用計數器比js斷點自己還要默記調了幾次快多了。
console.assert使用該函數可以讓我們在某些地方只在符合某個條件才進行調試輸出,使輸出更加干凈。當然你也可以用if語句,不過寫起來就麻煩了一些。
語法:
console.assert(assertion, obj1 [, obj2, ..., objN]); console.assert(assertion, msg [, subst1, ..., substN]); // c-like message formatting
參數說明:
assertion:一個布爾表達式。如果assertion為假,消息將會被輸出到控制臺之中。
obj1 ... objN:被用來輸出的Javascript對象列表,最后輸出的字符串是各個對象依次拼接的結果。
msg:一個包含零個或多個子串的Javascript字符串。
subst1 ... substN:各個消息作為字串的Javascript對象。這個參數可以讓你能夠控制輸出的格式。
注意: console.assert( )方法在Node.js中的實現和瀏覽器中可用的console.assert()方法實現是不同的。
在瀏覽器中當console.assert()方法接受到一個值為假斷言(assertion)的時候,會向控制臺輸出傳入的內容,但是并不會中斷代碼的執行,而在Node.js中一個值為假的斷言將會導致一個AssertionError被拋出,使得代碼執行被打斷。
如下實例,console.assert()語句保證cat對象的score變量值長度為3:
function cat(name, age, score){ this.name = name; this.age = age; this.score = score; } var c = new cat("miao", 2, [6,8,7]); console.assert(c.score.length==3, "Assertion of score length failed");
在console.assert()語句中,第一個參數為需要進行assert的結果,正常情況下應當為true;第二個參數則為出錯時在控制臺上打印的錯誤信息。比如,當上述例子中score變量的數組長度不為3時:
function cat(name, age, score){ this.name = name; this.age = age; this.score = score; } var c = new cat("miao", 2, [6,8]); console.assert(c.score.length==3, "Assertion of score length failed");
代碼執行后,Firebug控制臺將會打印錯誤信息:Assertion failed: Assertion of score length failed
console.group分組輸出,它能夠讓控制臺輸出的語句產生不同的層級嵌套關系,每一個console.group()會增加一層嵌套,相反要減少一層嵌套可以使用console.groupEnd()方法。
console.log("這是第一層"); console.group(); console.log("這是第二層"); console.log("依然第二層"); console.group(); console.log("第三層了"); console.groupEnd(); console.log("回到第二層"); console.groupEnd(); console.log("回到第一層");
輸出結果如圖所示:
和console.group()相似的方法是console.groupCollapsed()作用相同,不同點是嵌套的輸出內容是折疊狀態。
console.profile([profileLabel])這是個挺高大上的東西,可用于性能分析。在 JS 開發中,我們常常要評估段代碼或是某個函數的性能。在函數中手動打印時間固然可以,但顯得不夠靈活而且有誤差。借助控制臺以及console.profile()方法我們可以很方便地監控運行性能。
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 面板下看到上述代碼運行過程中的消耗時間。
console.clear清空控制臺的內容(當然你可以用快捷鍵ctrl+L)。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/90318.html
摘要:例如我們導入模塊,可以這么導入桃翁歡迎關注公眾號前端桃園報錯不能定義相同名字變量報錯,不能重新賦值小豬可以看到導入綁定這里不理解綁定,文章后面會解釋時,形式類似于對象解構,但實際上并無關聯。 歡迎訪問個人站點 簡介 何為模塊 一個模塊只不過是一個寫在文件中的 JavaScript 代碼塊。 模塊中的函數或變量不可用,除非模塊文件導出它們。 簡單地說,這些模塊可以幫助你在你的模塊中編寫...
摘要:個人前端文章整理從最開始萌生寫文章的想法,到著手開始寫,再到現在已經一年的時間了,由于工作比較忙,更新緩慢,后面還是會繼更新,現將已經寫好的文章整理一個目錄,方便更多的小伙伴去學習。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 個人前端文章整理 從最開始萌生寫文章的想法,到著手...
摘要:基本概念方法接收一個函數作為累加器,數組中的每個值從左到右開始縮減,最終為一個值。例進階應用使用方法可以完成多維度的數據疊加。在該函數內部,則執行多維的疊加工作。參考的內建函數數組方法的高級技巧 基本概念 reduce() 方法接收一個函數作為累加器(accumulator),數組中的每個值(從左到右)開始縮減,最終為一個值。 reduce 為數組中的每一個元素依次執行回調函數,不包括...
閱讀 2892·2021-10-14 09:42
閱讀 1245·2021-09-24 10:32
閱讀 2952·2021-09-23 11:21
閱讀 2840·2021-08-27 13:10
閱讀 3327·2019-08-29 18:41
閱讀 2195·2019-08-29 15:16
閱讀 1194·2019-08-29 13:17
閱讀 893·2019-08-29 11:22