1. 程式人生 > >Node入門教程(5)第四章:global 全局變量

Node入門教程(5)第四章:global 全局變量

-c 這不 .com clear 替換 http htm 取消 floating

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 中任何地方直接調用。接下來看看它的常用方法。

  1. 打印日誌 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方法一致。

  1. 打印錯誤消息和警告信息

語法:console.error([data][, ...args])

error方法的使用同 log方法,所以不贅述,我們一般用此方法打印錯誤消息,一般用log方法打印普通消息。

console.error(‘error‘);

另外打印警告信息使用warn方法,此方法僅僅提示開發人員一些警示信息,用法同log方法。

語法:console.warn([data][, ...args])

  1. 打印對象結構

語法: 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的手段。

  1. 時間計時

同瀏覽器一致,也封裝了計時的兩個方法: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
  1. 其他方法
說明實例
打印堆棧跟蹤在代碼 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背後是怎樣運行的?模塊機制是怎麽搞到的?且看下回再解。


參考:

  1. NodeJs 官網文檔
  2. MDN 文檔

老馬免費視頻教程

返回教程列表首頁

github地址:https://github.com/malun666/aicoder_node

Node入門教程(5)第四章:global 全局變量