Node入門教程(5)第四章:global 全局變量
global - 全局變量
全局對象(global object),不要和 全局的對象( global objects )或稱標準內置對象混淆。這裏說的全局的對象是說在全局作用域裏的內的對象。全局作用域包含了全局對象的屬性,還有它繼承來的屬性。
註意瀏覽器下的全局對象跟 nodejs 中的全局對象不一致
- 瀏覽器環境下的全局對象就是
window
- Node 的全局對象是
global
JS 語言標準的全局的內置對象
JS 語言規範中的全局的內置對象在 Nodejs 中都有效,以下簡單過一下,不熟悉請查MDN 文檔
- 全局屬性
- Infinity
- NaN
- undefined
- null 字面量
- 函數屬性
- eval()
- uneval()
- isFinite()
- isNaN()
- parseFloat()
- parseInt()
- decodeURI()
- decodeURIComponent()
- encodeURI()
- encodeURIComponent()
- escape()
- unescape()
- 基本對象與其他內容
- Object
- Function
- Boolean
- Symbol
- Error
- Number
- Math
- Date
- String
- RegExp
- Array
- Map
- Set
- JSON
- ArrayBuffer
- Promise
- Generator
- GeneratorFunction
- Reflect
- Proxy
- arguments
nodejs 中的全局變量
關於模塊的補充
這裏先簡單補充一下模塊的概念,後續我們還會更深入講解一下,筆者不想讓復雜的內容讓初學者分心,只是想讓您能快速先建立學習 Nodejs 的信心。NodeJs 中把不同功能的 api 封裝成不同的模塊,避免了不同功能的代碼相互沖突。當然 NodeJS 也支持開發人員寫的 Nodejs 代碼模塊化。如果你是 Java、DotNet 的程序員,那 Nodejs 的模塊就是 DotNet 的程序集或者 Java 的包。
Node 中所有的代碼都會被 node 編譯器自動包裝成模塊後再進行解析執行,具體細節後面會有詳解。
console(控制臺)
console
模塊提供了一個簡單的調試控制臺,類似於 Web 瀏覽器提供的 JavaScript 控制臺。
註意:全局的 console 對象的方法既不總是同步的(如瀏覽器中類似的 API)
全局的console
對象可以再 node 中任何地方直接調用。接下來看看它的常用方法。
- 打印日誌 console.log
語法:console.log([data][, ...args])
打印到輸出控制臺,並帶上換行符。 可以傳入多個參數,第一個參數作為主要信息(字符串類型),其他參數作為代替值。
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背後是怎樣運行的?模塊機制是怎麽搞到的?且看下回再解。
參考:
- NodeJs 官網文檔
- MDN 文檔
老馬免費視頻教程
返回教程列表首頁
github地址:https://github.com/malun666/aicoder_node
Node入門教程(5)第四章:global 全局變量