09 | console中騷操作

我最開始接觸前端的時(shí)候,學(xué)會(huì)用的就是 console.log 们镜,甚至現(xiàn)在币叹,大部分情況也還在用它調(diào)試,但是模狭,在不同的場景下颈抚,除了 log ,其實(shí)有更好的選擇嚼鹉。

1. console.assert

MDN 中是這樣定義的

console.assert(assertion, obj1 [, obj2, ..., objN]);
console.assert(assertion, msg [, subst1, ..., substN]); // c-like message formatting

當(dāng)我們傳入的第一個(gè)參數(shù)為 時(shí)贩汉,console.assert 打印跟在這個(gè)參數(shù)后面的值。

這個(gè)方法適用于什么情況呢锚赤?舉個(gè)栗子:

通過它匹舞,你可以擺脫令人討厭的 if 表達(dá)式,還可以獲得堆棧信息线脚。

請(qǐng)注意赐稽,如果你使用的 NodeJS 版本 ≤ 10.0 叫榕, console.assert 可能會(huì)中斷后面代碼的執(zhí)行,但是在 .10 的版本中被修復(fù)了(當(dāng)然姊舵,在瀏覽器中不存在這個(gè)問題)

2. 增強(qiáng) log 的閱讀體驗(yàn)

有時(shí)即使你 console.log 一個(gè)簡單的變量晰绎,你可能會(huì)忘記(或混淆)哪一個(gè)是那個(gè)。那當(dāng)你有不同的變量需要打印的時(shí)候括丁,閱讀起來會(huì)更費(fèi)勁荞下。

假如有這么一堆你想要輸出但看起來并不易讀的數(shù)據(jù)

“哪一個(gè)值對(duì)應(yīng)哪一個(gè)變量來著?”

為了讓它變得更加易讀躏将,你可以打印一個(gè)對(duì)象 - 只需將所有 console.log 的參數(shù)包裝在大括號(hào)中锄弱。感謝 ECMAScript 2015 中引入了 enhanced object literal(增強(qiáng)對(duì)象文字面量) ,所以加上 {} 已經(jīng)是你需要做的全部事情了:

3.console.table

console.table 這個(gè)小技巧在開發(fā)者中可能并沒有多少人知道: 如果有一個(gè) 數(shù)組 (或者是 類數(shù)組 的對(duì)象祸憋,或者就是一個(gè) 對(duì)象 )需要打印会宪,你可以使用 console.table 方法將它以一個(gè)漂亮的表格的形式打印出來。它不僅會(huì)根據(jù)數(shù)組中包含的對(duì)象的所有屬性蚯窥,去計(jì)算出表中的列名掸鹅,而且這些列都是可以 縮放甚至 還可以排序!!!

如果你覺得展示的列太多了,使用第二個(gè)參數(shù)拦赠,傳入你想要展示的列的名字:

image

對(duì)于后臺(tái)而言巍沙,只有 node 版本大于 10 以上, console.table 才能起作用

4. table 和 {} 的配合

我們剛剛看到了 console.table 這個(gè)技巧荷鼠,也了解了在他上面的 {} 句携,那么我們?yōu)槭裁床粚⑺麄兘Y(jié)合起來打造一個(gè)終極 log 呢?

5. console.dir

有時(shí)候你想要打印一個(gè) DOM 節(jié)點(diǎn)允乐。 console.log 會(huì)將這個(gè)交互式的元素渲染成像是從 Elements 中剪切出來的一樣矮嫉。如果說你想要查看 這個(gè)節(jié)點(diǎn)所關(guān)聯(lián)到的真實(shí)的js對(duì)象 呢?并且想要查看他的 屬性 等等牍疏?

在那樣的情況下蠢笋,就可以使用console.dir:

6. 給 logs 加上時(shí)間戳

我們總是需要打印各式各樣的信息,之前我們討論了如何讓輸出的信息更加直觀鳞陨,但是如果我們需要打印相關(guān)的時(shí)間信息呢昨寞?這就用到了計(jì)時(shí)的相關(guān)操作。

如果你想要給你的應(yīng)用中發(fā)生的事件加上一個(gè)確切的時(shí)間記錄厦滤,開啟 timestamps 援岩。你可以在設(shè)置(在調(diào)試工具中的 ? 下拉中找到它,或者按下 F1 )中來開啟或者使用 Commands Menu

7.監(jiān)測(cè)執(zhí)行時(shí)間

與其在所有事上展示一個(gè)時(shí)間戳掏导,或許你對(duì)腳本中的特殊的節(jié)點(diǎn)之間執(zhí)行的時(shí)間跨度更加感興趣享怀,對(duì)于這樣的情況,我們可以采用一對(duì)有效的 console 方法

  • console.time() — 開啟一個(gè)計(jì)時(shí)器
  • console.timeEnd() — 結(jié)束計(jì)時(shí)并且將結(jié)果在 console 中打印出來

如果你想一次記錄多件事碘菜,可以往這些函數(shù)中傳入不同的標(biāo)簽值凹蜈。(例如: console.time('loading') 限寞, console.timeEnd('loading') )

8. 給你的 console.log 加上 CSS 樣式

如果你給打印文本加上 %c 那么 console.log 的第二個(gè)參數(shù)就變成了CSS 規(guī)則!這個(gè)特性可以讓你的日志脫穎而出(例如 Facebook 在你打開 console 的時(shí)候所做的一樣)

ex:console.log('%cStop', 'color:red')

9. 讓 console.log 基于調(diào)用堆棧自動(dòng)縮進(jìn)

配合 Error 對(duì)象的 stack 屬性仰坦,讓你的 log 可以根據(jù)堆棧的調(diào)用自動(dòng)縮進(jìn):

function log(message) {
      console.log(
        // 這句話是重點(diǎn)當(dāng)我們 new 出來的 Error 對(duì)象時(shí)履植,會(huì)匹配它的stack 信息中的換行符,換行符出現(xiàn)的次數(shù)也等同于它在堆棧調(diào)用時(shí)的深度悄晃。
        ' '.repeat(new Error().stack.match(/\n/g).length - 2) + message
      );
    }

    function foo() {
      log('foo');
      return bar() + bar();
    }

    function bar() {
      log('bar');
      return baz() + baz();
    }

    function baz() {
      log('baz');
      return 17;
    }

    foo();

運(yùn)行結(jié)果如下:

10. 直接在回調(diào)中使用 console.log

是不是經(jīng)常有這樣的情況玫霎,就是我確定要將什么傳遞給回調(diào)函數(shù)。在這種情況下妈橄,我會(huì)在里面添加一個(gè) console.log 來檢查庶近。

有兩種方式來實(shí)現(xiàn):

  • 在回調(diào)方法的內(nèi)部使用 console.log
  • 直接使用 consolelog 來作為回調(diào)方法

我推薦使用第二種眷蚓,因?yàn)檫@不僅減少了輸入鼻种,還可能在回調(diào)中接收多個(gè)參數(shù)。(這在第一個(gè)解決方案中是沒有的)

11. 使用實(shí)時(shí)表達(dá)式

在本文形成的不久前沙热,DevToolsConsole 面板中引入了一個(gè)非常漂亮的附加功能叉钥,這是一個(gè)名為 Live expression 的工具

只需按下 "眼睛" 符號(hào),你就可以在那里定義任何 JavaScript 表達(dá)式篙贸。 它會(huì)不斷更新投队,所以表達(dá)的結(jié)果將永遠(yuǎn),存在 :-)

同時(shí)支持定義好幾個(gè):

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末爵川,一起剝皮案震驚了整個(gè)濱河市敷鸦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌寝贡,老刑警劉巖扒披,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異兔甘,居然都是意外死亡谎碍,警方通過查閱死者的電腦和手機(jī)鳞滨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門洞焙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拯啦,你說我怎么就攤上這事澡匪。” “怎么了褒链?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵唁情,是天一觀的道長。 經(jīng)常有香客問我甫匹,道長甸鸟,這世上最難降的妖魔是什么惦费? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮抢韭,結(jié)果婚禮上薪贫,老公的妹妹穿的比我還像新娘。我一直安慰自己刻恭,他們只是感情好瞧省,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鳍贾,像睡著了一般鞍匾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上骑科,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天橡淑,我揣著相機(jī)與錄音,去河邊找鬼咆爽。 笑死梳码,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的伍掀。 我是一名探鬼主播掰茶,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼蜜笤!你這毒婦竟也來了濒蒋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤把兔,失蹤者是張志新(化名)和其女友劉穎沪伙,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體县好,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡围橡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缕贡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翁授。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖晾咪,靈堂內(nèi)的尸體忽然破棺而出收擦,到底是詐尸還是另有隱情,我是刑警寧澤谍倦,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布塞赂,位于F島的核電站,受9級(jí)特大地震影響昼蛀,放射性物質(zhì)發(fā)生泄漏宴猾。R本人自食惡果不足惜圆存,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望仇哆。 院中可真熱鬧辽剧,春花似錦、人聲如沸税产。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辟拷。三九已至撞羽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間衫冻,已是汗流浹背诀紊。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留隅俘,地道東北人邻奠。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像为居,于是被迫代替她去往敵國和親碌宴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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