全局對象(global object),不要和 全局的對象( global objects )或稱標準內置對象混淆。這裏說的全局的對象是說在全局做用域裏的內的對象。全局做用域包含了全局對象的屬性,還有它繼承來的屬性。javascript
注意瀏覽器下的全局對象跟 nodejs 中的全局對象不一致html
window
global
JS 語言規範中的全局的內置對象在 Nodejs 中都有效,如下簡單過一下,不熟悉請查MDN 文檔前端
這裏先簡單補充一下模塊的概念,後續咱們還會更深刻講解一下,筆者不想讓複雜的內容讓初學者分心,只是想讓您能快速先創建學習 Nodejs 的信心。NodeJs 中把不一樣功能的 api 封裝成不一樣的模塊,避免了不一樣功能的代碼相互衝突。固然 NodeJS 也支持開發人員寫的 Nodejs 代碼模塊化。若是你是 Java、DotNet 的程序員,那 Nodejs 的模塊就是 DotNet 的程序集或者 Java 的包。java
Node 中全部的代碼都會被 node 編譯器自動包裝成模塊後再進行解析執行,具體細節後面會有詳解。node
console
模塊提供了一個簡單的調試控制檯,相似於 Web 瀏覽器提供的 JavaScript 控制檯。git
注意:全局的 console 對象的方法既不老是同步的(如瀏覽器中相似的 API)程序員
全局的console
對象能夠再 node 中任何地方直接調用。接下來看看它的經常使用方法。github
語法:console.log([data][, ...args])
api
打印到輸出控制檯,並帶上換行符。 能夠傳入多個參數,第一個參數做爲主要信息(字符串類型),其餘參數做爲代替值。瀏覽器
var count = 5; console.log('count: %d', count); // 打印: count: 5 到 stdout console.log('count:', count); // 打印: count: 5 到 stdout console.log('count:', count, '-222', '-999'); // 打印: count:5-222-999。 log方法能夠把多個參數鏈接一塊輸出。
log 方法的第一個參數是一個字符串,包含零個或多個佔位符。 每一個佔位符會被對應參數轉換後的值所替換。 支持的佔位符有
%s - 字符串。
%d - 數值(整數或浮點數)。
%i - Integer.
%f - Floating point value.
%j - JSON。若是參數包含循環引用,則用字符串 '[Circular]' 替換。 ...
更多請參考:Node 文檔
console.info() 函數是 console.log() 的一個別名。也就是說你用log方法跟info方法一致。
語法:console.error([data][, ...args])
error方法的使用同 log方法,因此不贅述,咱們通常用此方法打印錯誤消息,通常用log方法打印普通消息。
console.error('error');
另外打印警告信息使用warn方法,此方法僅僅提示開發人員一些警示信息,用法同log方法。
語法:console.warn([data][, ...args])
語法: console.dir(obj[, options])
參數說明:
第一個參數obj,就是要打印屬性的對象。
第二個參數options是設置打印的配置項:
showHidden - 若是爲 true,則該對象中的不可枚舉屬性和 symbol 屬性也會顯示。默認爲 false。
depth - 告訴 util.inspect() 函數當格式化對象時要遞歸多少次。 這對於檢查較大的複雜對象頗有用。 默認爲 2。 設爲 null 可無限遞歸。
colors - 若是爲 true,則輸出會帶有 ANSI 顏色代碼。 默認爲 false。 顏色是可定製的,詳見定製 util.inspect() 顏色。
var a = { age: 134, t: { name: '33', mm: '333' } }; console.dir(a); console.dir(a, { colors: true, showHidden: true });
dir方法很是有用,在能夠輔助咱們調試時查看對象內的屬性和繼承關係,也是一個很是好的學習js的手段。
同瀏覽器一致,也封裝了計時的兩個方法:console.time(label)
和console.timeEnd(label)
;
time方法啓動一個定時器,用以計算一個操做的持續時間。 定時器由一個惟一的 label 標識。 當調用 console.timeEnd() 時,可使用相同的 label 來中止定時器,並以毫秒爲單位將持續時間輸出到 stdout。 定時器持續時間精確到亞毫秒。
console.time('lb1'); for (let i = 0; i < 100; i++) {} console.timeEnd('lb1'); // 打印 lb1: 23.43ms
說明 | 實例 |
---|---|
打印堆棧跟蹤在代碼 | console.trace([message][, ...args]) |
計數器的顯示標籤 | console.count([label]) |
重置指定 label 的內部計數器。 | console.countReset([label='default']) |
清空控制檯 | console.clear() |
斷言 | console.assert(value[, message][, ...args]) |
console的方法還比較多,這裏就不一一列舉了,有興趣的能夠直接參考中文文檔
node提供了全局的3個設置定時器方法:
setImmediate(callback[, ...args])
setInterval(callback, delay[, ...args])
setTimeout(callback, delay[, ...args])
另外對應3個取消定時器的方法
clearImmediate(immediate)
clearInterval(timeout)
clearTimeout(timeout)
三個方法,使用上基本都表現一致,這裏只說一種狀況,其餘類比。
參數說明:
callback <Function> 當定時器到點時要調用的函數。 delay <number> 調用 callback 以前要等待的毫秒數。 ...args <any> 當調用 callback 時要傳入的可選參數。
var timer = setTimeout(()=>{ console.log(123); }, 100); // .... js代碼 clearTimeout(timer);
callback 可能不會精確地在 delay 毫秒被調用。 Node.js 不能保證回調被觸發的確切時間,也不能保證它們的順序。 回調會在儘量接近所指定的時間上調用。
注意:當 delay 大於 2147483647 或小於 1 時,delay 會被設爲 1。
另外全局還提供了 Buffer
、模塊相關變量、process
等全局變量。
這些內容,等咱們後續章節再詳細介紹。
到此爲止,您若是熟悉前端開發的話,這不就是前端js移到了nodejs上執行了嗎?的確如此,可是這運行的環境已經脫離了瀏覽器,是直接運行在操做系統之上了。
那麼nodejs背後是怎樣運行的?模塊機制是怎麼搞到的?且看下回再解。
參考: