Chrome 控制臺指南

轉自:http://blog.jobbole.com/76985/

Chrome的開發者工具已經強大到沒朋友的地步了,特別是其功能豐富界面友好的console,使用得當可以有如下功效:

  • 更高「逼格」更快「開發調試」更強「進階級的Frontender」
  • Bug無處遁形「Console大法好」

console.log

大家都會用log,但鮮有人很好地利用console.error?,?console.warn?等將輸出到控制臺的信息進行分類整理。
他們功能區別不大,意義在于將輸出到控制臺的信息進行歸類,或者說讓它們更語義化。
各個所代表的語義如下:

  • console.log:普通信息
  • console.info:提示類信息
  • console.error:錯誤信息
  • console.warn:警示信息

當合理使用上述log方法后,可以很方便地在控制臺選擇查看特定類型的信息。

console.log('一顆紅心向太陽','吼吼~');
console.info('樓上藥不能停!');
console.warn('樓上嘴太賤!');
console.error('樓上關你毛事?');

如果再配合console.group?與console.groupEnd,可以將這種分類管理的思想發揮到極致。這適合于在開發一個規模很大模塊很多很復雜的Web APP時,將各自的log信息分組到以各自命名空間為名稱的組里面。

console.group("app.foo");
console.log("來自foo模塊的信息 blah blah blah...");
console.groupEnd();
console.group("app.bar");
console.log("來自bar模塊的信息 blah blah blah...");
console.groupEnd();

而關于console.log,早已被玩兒壞了。一切都源于Chrome提供了這么一個API:第一個參數可以包含一些格式化的指令比如%c

比如給hello world?做件漂亮的嫁衣再拉出來見人:

console.log('%chello world','font-size:25px;color:red;');

如果你覺得不夠過癮,那就把你能寫出來的最華麗的CSS樣式都應用上吧,比如漸變。于是你可以得到如下華麗麗的效果:

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

各種招大招的節奏啊~

看著上面密集的代碼不用驚慌,上面console.log()第二個參數全是純CSS用來控制樣式的,你不會陌生。而第一個參數里可以帶用百分號開頭的轉義指令,如上面輸出帶樣式的文字時使用的%c指令。更詳細的指令參見官方API文檔的這個表格。

如果還不夠過癮,那咱們來log一些圖片吧,甚至。。。動圖?
對,你得先有圖,我們拿這張圖為例。

console.log("%c", "padding:50px 300px;line-height:120px;background:url('http://wayou.github.io/2014/09/10/chrome-console-tips-and-tricks/rabbit.gif') no-repeat;");

看著上面搖擺的豆比兔是不是有種抽它一臉的沖動。

除此,console.table?更是直接以表格的形式將數據輸出,不能贊得太多!
借用之前寫過的一篇博文里的例子:

var data = [{'品名': '杜雷斯', '數量': 4}, {'品名': '岡本', '數量': 3}];
console.table(data);

另外,console.log()?接收不定參數,參數間用逗號分隔,最終會輸出會將它們以空白字符連接。

console.log('%c你好','color:red;','小明','你知道小紅被媽媽打了么');

console.assert

當你想代碼滿足某些條件時才輸出信息到控制臺,那么你大可不必寫if或者三元表達式來達到目的,cosole.assert便是這樣場景下一種很好的工具,它會先對傳入的表達式進行斷言,只有表達式為假時才輸出相應信息到控制臺。

var isDebug=false;
console.assert(isDebug,'開發中的log信息。。。');

console.count

除了條件輸出的場景,還有常見的場景是計數。
當你想統計某段代碼執行了多少次時也大可不必自己去寫相關邏輯,內置的console.count可以很地勝任這樣的任務。

function foo(){//其他函數邏輯blah blah。。。console.count('foo 被執行的次數:');
}
foo();
foo();
foo();

console.dir

將DOM結點以JavaScript對象的形式輸出到控制臺
console.log是直接將該DOM結點以DOM樹的結構進行輸出,與在元素審查時看到的結構是一致的。不同的展現形式,同樣的優雅,各種體位任君選擇反正就是方便與體貼。

console.dir(document.body);
console.log(document.body);

console.time & console.timeEnd

輸出一些調試信息是控制臺最常用的功能,當然,它的功能遠不止于此。當做一些性能測試時,同樣可以在這里很方便地進行。
比如需要考量一段代碼執行的耗時情況時,可以用console.time與?console.timeEnd來做此事。

這里借用官方文檔的例子:

console.time("Array initialize");
var array= new Array(1000000);
for (var i = array.length - 1; i >= 0; i--) {array[i] = new Object();
};
console.timeEnd("Array initialize");

當然,我們也可以選擇自己寫代碼來計時:

var start=new Date().getTime();
var array= new Array(1000000);
for (var i = array.length - 1; i >= 0; i--) {array[i] = new Object();
};
console.log(new Date().getTime()-start);

相信你也看到了,用內置的console.time是多么地方便,省去了自己寫代碼來計算的工作量。另外值得一提的是,通過調用內置的console.time得到的結果要比自己手動計算的時間差更精確可靠。

console.profile & console.timeLime

當想要查看CPU使用相關的信息時,可以使用console.profile配合?console.profileEnd來完成這個需求。
這一功能可以通過UI界面來完成,Chrome 開發者工具里面有個tab便是Profile

與此類似的功能還有console.timeLine配合?console.timeLineEnd,它的作用是開始記錄一段時間軸,同樣可以通過Chrome開發者工具里的Timeline?標簽來進行相應操作。

所以在我看來這兩個方法有點雞肋,因為都可以通過操作界面來完成。但至少他提供了一種命令行方式的交互,還是多了種姿勢供選擇吧。

console.trace

堆棧跟蹤相關的調試可以使用console.trace。這個同樣可以通過UI界面完成。當代碼被打斷點后,可以在Call Stack面板中查看相關堆棧信息。

上面介紹的都是掛在window.console這個對象下面的方法,統稱為Console API,接下來的這些方法確切地說應該叫命令,是Chrome內置提供,在控制臺中使用的,他們統稱為Command Line API。

$

似乎美刀總是被程序員及各種編程語言所青睞「你看看PHP代碼就知道PHPer有多愛錢了」,在Chrome的控制臺里,$用處還真是蠻多且方便的。
$_命令返回最近一次表達式執行的結果,功能跟按向上的方向鍵再回車是一樣的,但它可以做為一個變量使用在你接下來的表達式中:

2+2//回車,再
$_+1//回車得5

上面的$_需要領悟其奧義才能使用得當,而$0~$4則代表了最近5個你選擇過的DOM節點。
什么意思?在頁面右擊選擇審查元素,然后在彈出來的DOM結點樹上面隨便點選,這些被點過的節點會被記錄下來,而$0會返回最近一次點選的DOM結點,以此類推,$1返回的是上上次點選的DOM節點,最多保存了5個,如果不夠5個,則返回undefined

另外值得一贊的是,Chrome 控制臺中原生支持類jQuery的選擇器,也就是說你可以用$加上熟悉的css選擇器來選擇DOM節點,多么滴熟悉。

$('body')

$(selector)返回的是滿足選擇條件的首個DOM元素。
剝去她偽善的外衣,其實$(selector)是原生JavaScript?document.querySelector()?的封裝。
同時另一個命令?$ $(selector)?返回的是所有滿足選擇條件的元素的一個集合,是對document.querySelectorAll()?的封裝。

$$('div')

copy

通過此命令可以將在控制臺獲取到的內容復制到剪貼板。

copy(document.body)

然后你就可以到處粘了:

看完此條命令行,機智的你是不是跟腦洞全開的我一樣,冒出了這樣一個想法:那就是通過這個命令可以在JavaScript里進行復制操作從而不用依賴Flash插件了。
But現實是殘酷的,如之前所述的,這里的控制臺命令只能在控制臺中環境中執行,因為他不依附于任何全局變量比如window,所以其實在JS代碼里是訪問不了這個copy方法的,所以從代碼層面來調用復制功能也就無從談起。但愿有天瀏覽器會提供相應的JS實現吧~

keys & values

這是一對基友。前者返回傳入對象所有屬性名組成的數據,后者返回所有屬性值組成的數組。具體請看下面的例子:

var tboy={name:'wayou',gender:'unknown',hobby:'opposite to the gender'};
keys(tboy);
values(tboy);

monitor & unmonitor

monitor(function),它接收一個函數名作為參數,比如function a,每次a被執行了,都會在控制臺輸出一條信息,里面包含了函數的名稱a及執行時所傳入的參數。

而unmonitor(function)便是用來停止這一監聽。

function sayHello(name){alert('hello,'+name);
}
monitor(sayHello);
sayHello('wayou');
unmonitor(sayHello);
sayHello('wayou');

debug & undebug

debug同樣也是接收一個函數名作為參數。當該函數執行時自動斷下來以供調試,類似于在該函數的入口處打了個斷點,可以通過debugger來做到,同時也可以通過在Chrome開發者工具里找到相應源碼然后手動打斷點。
undebug?則是解除該斷點。

而其他還有好些命令則讓人沒有說的欲望,因為好些都可以通過Chrome開發者工具的UI界面來操作并且比用在控制臺輸入要方便。

轉載于:https://www.cnblogs.com/CraryPrimitiveMan/p/3974213.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/258178.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258178.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258178.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

專家:大數據等新技術助力信息融合

ACCA中國區政策主管錢毓益本周末在出席由上海國家會計學院主辦的“管理會計:融合與創新”論壇時表示:新一輪以移動互聯網、物聯網和云計算及大數據為代表的信息技術,將融合與創新發展表現得淋漓盡致。 錢毓益指出,通過數字化轉型與…

python數據類型匯總_python基礎數據類型匯總

#!/usr/bin/env python# -*- encoding:utf-8 -*-# author:Administrator# make_time:2018/6/9‘‘‘數據類型:不可變數據類型:int、str、bool、tuple、frozenset可變數據類型:list、dict、set公共方法:count()、len()、del、copy(…

開發實戰細節之——關于整型轉換為字符串類型的性能與實現分析

細節決定成敗,開發中往往從一些細節就可以看出一個程序員的開發水準,下面我就給大家分享一下開發中最最常見的int轉換為String類型的方法及其性能解析。 一般大家最常用的方法有 方法一:String s1 String.valueOf(i); 方法二:St…

華為服務器故障燈不開機_華為服務器日常維護及故障處理介紹V.ppt

通電策略 power on上電自動開機。 power off上電不自動開機,需按前面板電源按鈕才能開機。 Last State上電開機與否取決于上次斷電之前的狀態,如果是關機狀態則通電后不能自動開機,如果是開機狀態則通電后可以自動開機。 硬件狗 BMC WDT Acti…

《黑客大曝光:移動應用安全揭秘及防護措施》一2.2 攻擊與對策

本節書摘來自華章出版社《黑客大曝光:移動應用安全揭秘及防護措施》一書中的第2章,第2.2節,作者 (美)Neil Bergman ,更多章節內容可以訪問云棲社區“華章計算機”公眾號查看 2.2 攻擊與對策 好&#xff0c…

Android 4.2 通知通過PendingIntent啟動Activity失敗的問題

今天突然發現在Android 4.2手機上點擊通知消息無法打開Activity的問題,具體Logcat信息如下: 01-09 11:37:43.733: WARN/ActivityManager(92): Unable to send startActivity intent java.lang.SecurityException: Permission Denial: starting Intent { …

ubuntu安裝sublime

添加sublime text 3的倉庫: sudo add-apt-repository ppa:webupd8team/sublime-text-3 更新軟件庫 sudo apt-get update 安裝Sublime Text 3: sudo apt-get install sublime-text-installer 安裝sublime2: sudo add-apt-repository ppa:webupd8team/sublime-text-2 …

jdbctemplate mysql 配置_Spring JDBCTemplate配置使用

一、開發環境Windows 10IntelliJ IDEA 2016.1 旗艦版JDK1.8二、項目和數據庫結構項目結構:數據庫(MySQL 5.5.39):/*Navicat MySQL Data TransferSource Server : localhostSource Server Version : 50539Source Host : localhost:3306Source Database : …

細數家庭安防五大亂象 何時能步入正軌

雖然智能家居行業在我國的成長已逾十個年頭了,但是目前市場離成型仍然有一段距離。市場上可謂“亂象”叢生,這些絆腳石嚴重阻礙了行業的良性發展。市場亂象繁生,智能家居從概念炒作到價格高抬,相關預測顯示,若真如電商…

HDU 1181 變形課

Problem Description呃......變形課上Harry碰到了一點小麻煩,由于他并不像Hermione那樣可以記住全部的咒語而任意的將一個棒球變成刺猬什么的,可是他發現了變形咒語的一個統一規律:假設咒語是以a開頭b結尾的一個單詞,那么它的作用就恰好是使A物體變成B物體. Harry已經將他所會的…

多線程(同步代碼塊和同步函數)

線程安全問題 當多條語句在操作同一個線程共享數據時,一個線程對多條語句只執行了一部分,還沒有執行完, 另一個線程參與進來執行。導致共享數據的錯誤。解決辦法: 對多條操作共享數據的語句,只能讓一個線程都執行…

沒有基礎學python_python沒有基礎好學嗎

什么是Python?Python是一種計算機程序設計語言。你可能已經聽說過很多種流行的編程語言,比如非常難學的C語言,非常流行的Java語言,適合初學者的Basic語言,適合網頁編程的JavaScript語言等,Python是他們其中…

C++中的頭文件和源文件

一、C編譯模式 通常,在一個C程序中,只包含兩類文件——cpp文件和h文件。cpp文件被稱作C源文件,里面放的都是C的源代碼;h文件則被稱作C頭文件,里面放的也是C的源代碼。 C 語言支持“分別編譯”(separ…

Hibernate 事物隔離級別 深入探究

目錄 一、數據庫事務的定義 二、數據庫事務并發可能帶來的問題 三、數據庫事務隔離級別 四、使用Hibernate設置數據庫隔離級別 五、使用悲觀鎖解決事務并發問題 六、使用樂觀鎖解決事務并發問題 Hibernate事務與并發問題處理(樂觀鎖與悲觀鎖) 一、數據庫…

Linked List Cycle II - LeetCode

Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Note: Do not modify the linked list. Follow up:Can you solve it without using extra space? 思路:維護兩個指針slow和fast。先判斷是否存在環。 在判斷是否…

mysql 無論輸入什么都是現實 not found_NotAPanda

前言面試競爭力越來越大,是時候擼一波Vue和React源碼啦;本文從20個層面來對比Vue和React的源碼區別;如果需要了解API的區別,請戳:Vue 開發必須知道的 36 個技巧React 開發必須知道的 34 個技巧文章源碼:請戳…

這五張PPT告訴你,如何打造無人駕駛“最強大腦”

“英特爾在談無人駕駛,會成為汽車制造商嗎?NO!我們要為無人駕駛提供從車、連接到云的‘最強大腦’。” 在昨天于北京舉行的英特爾無人駕駛分享會上,英特爾無人駕駛事業部中國區市場總監徐偉杰在主旨演講中開門見山。 這也是英特爾無人駕駛事業部去年11月…

javascript之ua與urlSchema

我們首先拿到瀏覽器ua: 1 var ua navigator.userAgent; 1 if (ua.indexOf("MicroMessenger") > -1) { 2 alert("微信瀏覽器"); 3 } 1 if (ua.indexOf("iPhone") > -1) { 2 alert("iphone"); 3 } 其…

ezdpl Linux自動化部署實戰

最近把ezdpl在生產環境中實施了,再加上這段時間的一些修改,一并介紹一下。再次申明: ezdpl不是開箱即用的,需要根據自己的應用環境定制。對初學者來說使用起來反倒困難更多、風險更大。它不是一個通用的項目,更多的是提…

無法打開輸入文件mysql_錯誤LNK1181,pip安裝“無法打開輸入文件”mysqlclient.lib'...

我是Python新手,正在嘗試安裝mysql模塊,但是在解決了其他5個問題之后,我現在遇到了一個問題,當我嘗試安裝該模塊時,會出現以下日志:PS C:\Users\poste> pip install mysqlCollecting mysqlUsing cached …