在全部內容的學習之中咱們常常首先要接受到的經常很大一部分爲命令行或是工具的內容展現,console內容爲node.js在命令行中答應數據內容的一個途徑。node
Console是nodejs中的元老級模塊了。穩定等級爲2模塊化
咱們經常在編寫nodeJS的時候使用console內容,例如在某一段代碼中打印出咱們想要知道的變量的狀態或者是相關錯誤信息等等,這時候經常使用console.log(err....)等形式的代碼內容,要知道其實這個時候咱們其實是使用了全局對象中的console實例內容。可是nodeJS中模塊化的思想也是註定了console內容確定是座位模塊的存在的,因此咱們一樣是能夠使用Console模塊的。函數
## 咱們下面先來看一段經常使用的全局console實例的代碼。工具
//控制檯內容的實例
//1.全局console實例的使用
var out = 'presentation content:';
var next = 5;
//log方法爲最爲經常使用的控制檯方法,用於標準輸出流的輸出,說白了就是在控制檯之中打印字符串。
console.log(out);
//可是實際上log是能夠傳遞多參數的內容的
console.log(out, next);
console.log('%s %d', out, next);
//info方法與log方法其實是同樣的。
console.info(out);
console.info(out, next);
相應的結果展現:學習
p.s.:這裏咱們須要說明一下,當咱們使用log函數傳遞多個參數的時候,其會自動的調用util.format方法內容來組裝拼接相關的展現內容,其組合方式相似於C語言(佔位符形式),當咱們傳遞的第一個字符串內容中內有站位符的話,則直接進行字符串拼接。而其中的info實際上就是log函數的別名,二者相同。this
## 咱們再來看一看console實例之中的其餘方法吧。spa
//dir方法內容用於打印當前的對象內容。
var obj = {
userName:'Arvin',
getName:function(){
return this.userName;
}
}
console.dir(obj);
console.dir(obj, {colors:true});
//log輸出形式是什麼。
console.log(obj);
相應結果:命令行
上面結果能夠看見使用dir函數能夠進行對對象的輸出,雖然在默認狀況之下展現的形式和log內容的形式相同,可是,當咱們隊dir方法的第二個參數內容進行設置的狀況下,課件第二展現結果,咱們能夠對展現內容樣式進行設置。這是由於dir內容對於展現內容設置經過util.inspect來進行設置的,具體內容課件文檔,後期也會進行util內容的說明。3d
## 下面咱們再看一看經過console內容來進行時間長度的計算,代碼以下code
//console實例的時間計算內容。
//這一組方法內容能夠來爲咱們判斷當期代碼塊內容的執行時間。
//固然雖然會有稍微的偏差,可是能夠幫助咱們判斷許多其餘的內容。
var tictik = 'tictik';
console.time(tictik);
setTimeout(function(){
console.timeEnd(tictik);
},100);
相關結果以下:
上可見相關內容爲兩次console內容運行的時間差值和指望的執行時間仍是有出入的。
## 下面咱們來看一下trace方法,以下
//trace方法來進行當前環境下的棧內容輸出。
console.trace('check this out');
相應結果以下:
上圖可知,trace將會把其中傳遞的值顯示在Trace:以後。而後將當前環境相面的棧數據內容進行輸出。依據上下文環境的不一樣輸出的內容不一樣。
## assert方法也是console實例中的經常使用語斷言的語句,其使用方式以下:
console.assert(false, 'this is wrong'); //第一個參數能夠是表達式,得出結果爲boolean就好。
相應結果:
如上圖所示,咱們能夠發現當咱們的使用assert的時候,首個傳遞的表達式計算結果爲false的時候,是會拋出異常的,並將異常和錯誤信息打印在控制檯。
##下面說兩個在8.3版本以後才加入到的console實例的方法內容,上代碼。
//group方法內容。
console.group(['check', 'this', 'out']);
console.group('check');
console.group({0:'1', 1:'2'});
上面代碼中的group方法內容是講下一次展現出來的內容添加兩格空格展現,結果以下。
這種展現方式方便時打印內容時候進行分組展現,層次關係比較好劃分。一樣的其也有一個別名爲groupCollapsed(),同事咱們想要結束分組輸出的狀況能夠使用groupEnd內容,固然其每次只縮減兩個空格。
## 新版本還有另外一個功能函數是count(),這一方法內容更具傳遞的‘label’參數來進行計算內容,固然不傳遞任何參數的狀況之之下則直接使用默認的default來進進行計數。代碼以下。
//count方法演示
var obj = {0:'1', 1:'2'};
var str = 'abc';
console.count();
console.count(str);
console.count(obj);
console.count('default');
console.count(str);
console.count();
console.count(obj);
相關結果:
又上可知,每次計算將會依據傳遞的值來進行先關的判斷,因爲判斷的形式是以string來進行的,因此傳遞進去的值若不是string類型的內容的話會經過toString()方法來先行的將值轉變爲string內容。就有了上圖所看到的傳遞obj的時候,其計數的內容爲[object Object]了。
## 最後咱們來看一下若是不使用全局變量內容,咱們應該如何使用Conosle模塊內容。依據文檔內容咱們能夠知道。Console對象在生成的時候須要兩個參數,即爲輸入輸出流的內容,兩個流分別問log信息輸出流,以及負責error信息輸出的流,而後經過new Conosle的內容來進行新實例的獲取和建立。從官網上copy寫了一段代碼,挺好理解的,就沒自個寫了,至於流的內容,以後會詳細的學習與記錄。
const out = getStreamSomehow();
const err = getStreamSomehow();
const myConsole = new console.Console(out, err);
myConsole.log('你好世界');
// 打印: '你好世界'到 out。
myConsole.log('你好%s', '世界');
// 打印: '你好世界'到 out。
myConsole.error(new Error('錯誤信息'));
// 打印: [Error: 錯誤信息]到 err。
const name = '描述';
myConsole.warn(`警告${name}`);
// 打印: '警告描述'到 err。
這裏要說明的一點就是就是在咱們經過NEW來進行Conosle對象的獲取的時候,咱們是能夠值傳遞一個參數,此時error的輸出,自動經過log的輸出流來進行輸出。