1. 程式人生 > >node總結之全域性物件瞭解下(一)

node總結之全域性物件瞭解下(一)

JavaScript 中有一個特殊的物件,稱為全域性物件(Global Object),它及其所有屬性都可以在程式的任何地方訪問,這就是全域性變數,在瀏覽器 JavaScript 中,通常 window 是全域性物件, 然而 Node.js 中的全域性物件是 global,所有全域性變數(除了 global 本身以外)都是 global 物件的屬性,所以,在 Node.js 我們可以直接訪問到 global 的屬性,而不需要在應用中包含它。

global 最根本的作用是作為全域性變數的宿主,因此,按照 ECMAScript 的定義,滿足以下條 件的變數是全域性變數:

  • 在最外層定義的變數;
  • 全域性物件的屬性;
  • 隱式定義的變數(未定義直接賦值的變數)。

當我們定義一個全域性變數時,這個變數同時也會成為全域性物件的屬性,反之亦然。需要注意的是,在 Node.js 中我們不可能在最外層定義變數,因為所有使用者程式碼都是屬於當前模組的, 而模組本身不是最外層上下文,所以我們如果永遠使用 var 定義變數,就可以避免引入全域性變數,這是因為全域性變數會汙染名稱空間,提高程式碼的耦合風險。

先來看第一個全域性變數__filename。

它表示當前正在執行的指令碼的檔名,會輸出檔案所在位置的絕對路徑,且和命令列引數所指定的檔名不一定相同。 如果在模組中,返回的值是模組檔案的路徑,例項如下:

// 輸出全域性變數 __filename 的值
console.log( __filename );

第二個就是__dirname,它表示當前執行指令碼所在的目錄,例項如下:

// 輸出全域性變數 __dirname 的值
console.log( __dirname );

完事就是setTimeout(cb, ms) 全域性函式,它在指定的毫秒(ms)數後執行指定函式(cb),並且,只執行一次指定函式,之後會返回一個代表定時器的控制代碼值,來看例項:

function printHello(){
   console.log( "Hello, World!");
}
// 兩秒後執行以上函式
setTimeout(printHello, 2000);

clearTimeout( t ) 全域性函式用於停止一個之前通過 setTimeout() 建立的定時器,其中的引數 t 是通過 setTimeout() 函式建立的定時器,例項如下:

function printHello(){
   console.log( "Hello, World!");
}
// 兩秒後執行以上函式
var t = setTimeout(printHello, 2000);

// 清除定時器
clearTimeout(t);

然後就是setInterval(cb, ms) 全域性函式,它是在指定的毫秒(ms)數後執行指定函式(cb),之後就會返回一個代表定時器的控制代碼值。我們可以使用 clearInterval(t) 函式來清除定時器。不過正常情況下,setInterval() 方法會不停地呼叫函式,直到 clearInterval() 被呼叫或視窗被關閉,例項如下:

function printHello(){
   console.log( "Hello, World!");
}
// 兩秒後執行以上函式
setInterval(printHello, 2000);

如果執行上述程式碼的話,會每隔兩秒就會輸出一次"Hello, World!",且會永久執行下去,直到我們按下 ctrl + c 按鈕。

之後就是console這個鬼了。

console 用於提供控制檯標準輸出,它是由 Internet Explorer 的 JScript 引擎提供的除錯工具,後來逐漸成為瀏覽器的實施標準,Node.js 沿用了這個標準,提供與習慣行為一致的 console 物件,用於向標準輸出流(stdout)或標準錯誤流(stderr)輸出字元,下面來看下console 物件的方法:

序號 方法 & 描述
1 console.log([data][, ...])
向標準輸出流列印字元並以換行符結束。該方法接收若干 個引數,如果只有一個引數,則輸出這個引數的字串形式。如果有多個引數,則 以類似於C 語言 printf() 命令的格式輸出。
2 console.info([data][, ...])
該命令的作用是返回資訊性訊息,這個命令與console.log差別並不大,除了在chrome中只會輸出文字外,其餘的會顯示一個藍色的驚歎號。
3 console.error([data][, ...])
輸出錯誤訊息的。控制檯在出現錯誤時會顯示是紅色的叉子。
4 console.warn([data][, ...])
輸出警告訊息。控制檯出現有黃色的驚歎號。
5 console.dir(obj[, options])
用來對一個物件進行檢查(inspect),並以易於閱讀和列印的格式顯示。
6 console.time(label)
輸出時間,表示計時開始。
7 console.timeEnd(label)
結束時間,表示計時結束。
8 console.trace(message[, ...])
當前執行的程式碼在堆疊中的呼叫路徑,這個測試函式執行很有幫助,只要給想測試的函式裡面加入 console.trace 就行了。
9 console.assert(value[, message][, ...])
用於判斷某個表示式或變數是否為真,接收兩個引數,第一個引數是表示式,第二個引數是字串。只有當第一個引數為false,才會輸出第二個引數,否則不會有任何結果。

其中,console.log(),它就是向標準輸出流列印字元並以換行符結束。

console.log 可以接收若干 個引數,如果只有一個引數,則輸出這個引數的字串形式。如果有多個引數,則 以類似於C 語言 printf() 命令的格式輸出,也就是第一個引數是一個字串,如果沒有 引數,只打印一個換行,如下:

console.log('Hello world'); 
console.log('byvoid%diovyb'); 
console.log('byvoid%diovyb', 1991); 

要記得以下這兩點:

  • console.error():與console.log() 用法相同,只是向標準錯誤流輸出。
  • console.trace():向標準錯誤流輸出當前的呼叫棧。

看個輸出:

console.trace();

執行結果如下:

Trace: 
at Object.<anonymous> (/home/byvoid/consoletrace.js:1:71) 
at Module._compile (module.js:441:26) 
at Object..js (module.js:459:10) 
at Module.load (module.js:348:31) 
at Function._load (module.js:308:12) 
at Array.0 (module.js:479:10) 
at EventEmitter._tickCallback (node.js:192:40)

來看個完整的例項:

console.info("程式開始執行:");

var counter = 10;
console.log("計數: %d", counter);

console.time("獲取資料");
//
// 執行一些程式碼
// 
console.timeEnd('獲取資料');

console.info("程式執行完畢。")

輸出結果為:

$ node main.js
程式開始執行:
計數: 10
獲取資料: 0ms
程式執行完畢

好啦,本次記錄就到這裡了。

如果感覺不錯的話,請多多點贊支援哦。。。