JavaScript Console知識點(diǎn)

===============

1 問題

Console是什么?

console是什么

Console 對象用于 JavaScript 調(diào)試。

JavaScript 原生中默認(rèn)是沒有 Console
對象,這是宿主對象(也就是游覽器)提供的內(nèi)置對象。 用于訪問調(diào)試控制臺,
在不同的瀏覽器里效果可能不同。

console知識點(diǎn)

控制臺輸入console,然后就可看到:

0f81c1c7-2a07-43af-8d3b-3623bde777dd.001.png

01.基礎(chǔ)用法——console.log()

打印一段文本

console.log('Is this working?');

打印對象

const foo = { id: 1, verified: true, color: 'green' };

const bar = { id: 2, verified: false, color: 'red' };

接著我們看控制臺的輸出展現(xiàn):

0f81c1c7-2a07-43af-8d3b-3623bde777dd.002.png

從圖中我們看出,無法看出對應(yīng)的變量名;如果想讓兩個(gè)對象一起輸出,我們可以使用console.log({
foo, bar
}),由于一行內(nèi)容顯示有限,對象內(nèi)容部分進(jìn)行了省略,我們必須點(diǎn)擊左邊的小箭頭看更詳細(xì)的內(nèi)容,如下圖所示:

0f81c1c7-2a07-43af-8d3b-3623bde777dd.003.jpeg

02. **console.info **用于輸出提示性信息

03.console.error()用于輸出錯(cuò)誤信息

04.console.warn() 用于輸出錯(cuò)誤信息

一些特別的信息我們需要特別強(qiáng)調(diào)醒目的輸出出來,比如警告和錯(cuò)誤信息,你可以使用console.warn()
& console.error(),輸出的展示形式如下圖所示,是不是更醒目:

0f81c1c7-2a07-43af-8d3b-3623bde777dd.004.png

你還可以更進(jìn)一步,自定義打印輸出的樣式,你可以使用**%c **語法。你可以使用這個(gè)方法更好的區(qū)分定義來源你的哪個(gè)API調(diào)用,用戶事件,示例如下:

console.log('%c Auth ',

'color: white; background-color: #2274A5',

'登錄驗(yàn)證通過');

console.log('%c GraphQL ',

'color: white; background-color: #95B46A',

'獲取用戶信息');

console.log('%c Error ',

'color: white; background-color: #D33F49',

'獲取用戶信息失敗');

0f81c1c7-2a07-43af-8d3b-3623bde777dd.005.jpeg

05.console.debug用于輸出調(diào)試信息

console對象的上面5種方法,都可以使用printf風(fēng)格的占位符。不過,占位符的種類比較少,只支持字符(%s)、整數(shù)(%d或%i)、浮點(diǎn)數(shù)(%f)和對象(%o)四種。

console.log("%d年%d月%d日",2011,3,26);

console.log("圓周率是%f",3.1415926);

0f81c1c7-2a07-43af-8d3b-3623bde777dd.006.png

%o占位符,可以用來查看一個(gè)對象內(nèi)部情況

var dog = {};

dog.name = "大毛";

dog.color = "黃色";

console.log("%o", dog);

0f81c1c7-2a07-43af-8d3b-3623bde777dd.007.png

06.console.dir()

console.dir()可以直觀展示一個(gè)對象的所有屬性和方法,示例代碼如下:

(這個(gè)方法是我經(jīng)常使用的 可不知道比for
in方便了多少)直接將該DOM結(jié)點(diǎn)以DOM樹的結(jié)構(gòu)進(jìn)行輸出,可以詳細(xì)查對象的方法發(fā)展等等

0f81c1c7-2a07-43af-8d3b-3623bde777dd.008.jpeg
0f81c1c7-2a07-43af-8d3b-3623bde777dd.009.png

function 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);

0f81c1c7-2a07-43af-8d3b-3623bde777dd.010.jpeg

07.console.dirxml用來顯示網(wǎng)頁的某個(gè)節(jié)點(diǎn)(node)所包含的html/xml代碼

0f81c1c7-2a07-43af-8d3b-3623bde777dd.011.png

08.console.group() 輸出一組信息的開頭

有時(shí)候,為了方便分析,你需要將一些對象變量等信息進(jìn)行分組打印輸出,示例如下:

console.group('User Details');

console.log('name: John Doe');

console.log('job: Software Developer');

// Nested Group

console.group('Address');

console.log('Street: 123 Townsend Street');

console.log('City: San Francisco');

console.log('State: CA');

console.groupEnd();

console.groupEnd();

0f81c1c7-2a07-43af-8d3b-3623bde777dd.012.jpeg

09.console.groupEnd結(jié)束一組輸出信息

看你需求選擇不同的輸出方法來使用,如果上述四個(gè)方法再配合group和groupEnd方法來一起使用就可以輸入各種各樣的不同形式的輸出信息。

0f81c1c7-2a07-43af-8d3b-3623bde777dd.013.jpeg

10.console.assert對輸入的表達(dá)式進(jìn)行斷言,只有表達(dá)式為false時(shí),才輸出相應(yīng)的信息到控制臺

0f81c1c7-2a07-43af-8d3b-3623bde777dd.014.jpeg

11.console.count(這個(gè)方法非常實(shí)用哦)當(dāng)你想統(tǒng)計(jì)代碼被執(zhí)行的次數(shù)

假如你在寫一個(gè)React應(yīng)用,然后你想要知道某個(gè)組件渲染的次數(shù),你會(huì)怎么做?去查看源代碼,然后一個(gè)一個(gè)數(shù)?這真的是太麻煩了。你可以用console.count(“Counter”)來查詢渲染次數(shù),我們還有一個(gè)相應(yīng)的函數(shù)來清零計(jì)數(shù)器:console.countReset('Counter')

0f81c1c7-2a07-43af-8d3b-3623bde777dd.015.jpeg
0f81c1c7-2a07-43af-8d3b-3623bde777dd.016.jpeg

12.console.time(),console.timeEnd 計(jì)時(shí)結(jié)束(看了下面的圖你瞬間就感受到它的厲害了)

console.time()啟動(dòng)一個(gè)計(jì)時(shí)器,并用timeEnd()結(jié)束計(jì)時(shí),它們一般用于性能檢查時(shí)。你也可以將一個(gè)字符串傳遞給time和timeEnd,它將啟動(dòng)名稱為該字符串的計(jì)時(shí)器。

0f81c1c7-2a07-43af-8d3b-3623bde777dd.017.jpeg

我們在開發(fā)過程中,經(jīng)常需要知道一個(gè)方法運(yùn)行了多長時(shí)間,方便我們做出修改完善的判斷,我們可以使用console.time(),示例如下:

let i = 0;

console.time("While loop");

while (i < 1000000) {

i++;

}

console.timeEnd("While loop");

console.time("For loop");

for (i = 0; i < 1000000; i++) {

// For Loop

}

console.timeEnd("For loop");

0f81c1c7-2a07-43af-8d3b-3623bde777dd.018.jpeg
0f81c1c7-2a07-43af-8d3b-3623bde777dd.019.jpeg

13.console.profileconsole.profileEnd配合一起使用來查看CPU使用相關(guān)信息

0f81c1c7-2a07-43af-8d3b-3623bde777dd.020.jpeg

在Profiles面板里面查看就可以看到cpu相關(guān)使用信息

0f81c1c7-2a07-43af-8d3b-3623bde777dd.021.jpeg

14.console.timeLineconsole.timeLineEnd配合一起記錄一段時(shí)間軸

15.console.trace()

console.trace()方法用于顯示當(dāng)前執(zhí)行的代碼在堆棧中的調(diào)用路徑。如下段代碼所示,在控制臺里清晰了展示了add()的調(diào)用軌跡

function add(a,b){

console.trace();

return a+b;

}

function add3(a,b){return add2(a,b);}

function add2(a,b){return add1(a,b);}

function add1(a,b){return add(a,b);}

var x = add3(1,1);

0f81c1c7-2a07-43af-8d3b-3623bde777dd.022.jpeg

16.console.table()

打印出一個(gè)可交互的表格,而您僅需傳入一個(gè)對象數(shù)組。

為了增加輸出的可讀性,我們可以使用console.table()讓其通過表格的形式進(jìn)行展示,比如我們在控制臺輸出console.table({
foo, bar}),如下圖所示:

0f81c1c7-2a07-43af-8d3b-3623bde777dd.023.jpeg

17. console.clear()

實(shí)現(xiàn)清空控制臺信息。如下圖所示

0f81c1c7-2a07-43af-8d3b-3623bde777dd.024.png

現(xiàn)在假設(shè)一個(gè)場景,如果一個(gè)數(shù)組里面有成百上千的元素,但是你想知道每個(gè)元

使用Console有什么好處【優(yōu)點(diǎn)】?

console和alert對比。

對比 console.log alert
是否能看到內(nèi)部結(jié)構(gòu) console能看到結(jié)構(gòu)話的東西,console能看到對象的內(nèi)容。 彈出一個(gè)對象就是[object object],
是否打斷頁面 不會(huì)打斷你頁面的操作,輸出內(nèi)容后你頁面還可以正常操作 彈出來內(nèi)容,那么頁面就死了
優(yōu)點(diǎn) 方便你調(diào)式j(luò)avascript用的。

3)使用Console有什么壞處【缺點(diǎn)】?

調(diào)用Console畢竟是調(diào)用了函數(shù),多少會(huì)影響系統(tǒng)性能,所以在發(fā)布版本中盡量把Console注釋掉。

利用一下函數(shù)可以分析具體調(diào)用多少時(shí)間。console.time來測試

console.time('console');

console.log('test');

console.timeEnd('console');

Console使用場景?

Console 對象常見的兩個(gè)用途:

  • 顯示網(wǎng)頁代碼運(yùn)行時(shí)的錯(cuò)誤信息。

  • 提供了一個(gè)命令行接口,用來與網(wǎng)頁代碼互動(dòng)。

(1)利用控制臺輸出圖片

0f81c1c7-2a07-43af-8d3b-3623bde777dd.025.png

(2)重寫console.log 改變輸出文字的樣式

0f81c1c7-2a07-43af-8d3b-3623bde777dd.026.png

(3)指定輸出文字的樣式

0f81c1c7-2a07-43af-8d3b-3623bde777dd.027.png

5)console.log()打印輸出臺不顯示輸出內(nèi)容

瀏覽器console.log()打印輸出臺不顯示輸出內(nèi)容的原因應(yīng)該很多,如網(wǎng)絡(luò)上所說:console.log()被重新定義等等原因(需要驗(yàn)證真實(shí)性?)都可能導(dǎo)致console.log()打印不能顯示打印信息。

今天,在測試screen.availWidth的時(shí)候就出現(xiàn)了console.log()打印臺始終無法打印出內(nèi)容的局面。困惑了半天后,終于找到了具體的原因。并且看到這個(gè)原因的時(shí)候,真TM想給自己兩耳光,或者直接來個(gè)冷水沖頭,清醒清醒。

html/CSS/JavaScript代碼如下:

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />

<title>screen</title>

</head>

<body>

<script type="text/javascript">

alert("123");

console.log("123");

console.log("頁面寬度為 "+screen.availWidth);

console.log("頁面高度為 "+screen.availHeight);

</script>

</body>

</html>

遇到控制臺console.log()無法打印的情況

1.首先應(yīng)該排查default.levels。

我們首先應(yīng)該排查default.levels。一般沒有內(nèi)容顯示,就必須查看default.levels下的info是否勾選。實(shí)在不會(huì),直接點(diǎn)擊default.levels下的default選項(xiàng);

這是比較常見原因和解決方案。

0f81c1c7-2a07-43af-8d3b-3623bde777dd.028.jpeg

今天七仔在選定default的時(shí)候同樣無法獲得console.log()的打印內(nèi)容,又是怎么一回事呢?

2.檢查default.levels前面輸入框中是否有填寫內(nèi)容

注意,一定要檢查default.levels前面輸入框中是否有填寫內(nèi)容,默認(rèn)為Filter;七仔則是在Filter中填寫了一串?dāng)?shù)字。Filter,單詞意思,“過濾”“過濾器”……意思就是在控制臺中查找自己需要的信息。并且,filter中的內(nèi)容,即便是在關(guān)閉瀏覽器的前提下,也不會(huì)消失。大家一定要謹(jǐn)慎對待。

0f81c1c7-2a07-43af-8d3b-3623bde777dd.029.jpeg
0f81c1c7-2a07-43af-8d3b-3623bde777dd.030.jpeg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容