1. 程式人生 > >Node.js——全域性物件

Node.js——全域性物件

 

全域性物件

  1. 在最外層定義的變數
  2. 全域性物件的屬性(global是全域性變數的宿主)
  3. 隱式定義的變數(未定義直接賦值的變數)

 

當定義全域性變數時,這個變數也會成為全域性物件的屬性,在node.js不可能在最外層定義變數。

建議:永遠使用var去定義非全域性變數

 

__filename

表示當前正在執行的腳步的檔名

 

__dirname

表示當前執行指令碼所在的目錄

 

例項:

console.log(__dirname);
console.log(__filename);

 

執行結果:

 

SetTimeout()

原始碼:function setTimeout(callback, delay, args) {}

第一個引數:回撥函式

第二個引數:延遲時間(單位ms)

Delay毫秒後執行callback函式;

例項:

function say(){
    console.log("有些事,只能一個人做。有些關,只能一個人過。有些路啊,只能一個人走。")
}
setTimeout(say,1000);

執行結果:

 

 

clearTimeout()

停止setTimeout()建立的定時器

例項:

function say(){
    console.log("有些事,只能一個人做。有些關,只能一個人過。有些路啊,只能一個人走。")
}
var t = setTimeout(say,1000);
clearTimeout(t);

 

執行結果:

 

 

Setlnterval()

全域性韓在指定時間後執行函式,會不停地重複呼叫函式,直到clearInterval()被呼叫或視窗被關閉

例項:

function say(){
    console.log("有些事,只能一個人做。有些關,只能一個人過。有些路啊,只能一個人走。")
}
var t = setInterval(say,1000);


 

執行結果:

 

Console

控制檯標準輸出

console.log([data][, ...])

向標準輸出流列印字元並以換行符結束。

console.info([data][, ...])

返回資訊性訊息,這個命令與console.log差別並不大,除了在chrome中只會輸出文字外,其餘的會顯示一個藍色的驚歎號。

console.error([data][, ...])

輸出錯誤訊息的。控制檯在出現錯誤時會顯示是紅色的叉子。

console.warn([data][, ...])

輸出警告訊息。控制檯出現有黃色的驚歎號。

console.dir(obj[, options])

用來對一個物件進行檢查(inspect),並以易於閱讀和列印的格式顯示。

console.time(label)

輸出時間,表示計時開始。

console.timeEnd(label)

結束時間,表示計時結束。

console.trace(message[, ...])

當前執行的程式碼在堆疊中的呼叫路徑,這個測試函式執行很有幫助,只要給想測試的函式裡面加入 console.trace 就行了。

console.assert(value[, message][, ...])

用於判斷某個表示式或變數是否為真,接收兩個引數,第一個引數是表示式,第二個引數是字串。只有當第一個引數為false,才會輸出第二個引數,否則不會有任何結果。

 

例項:

console.log('hello %s',"word");
console.log('hello %s ','word');
console.log('hello %s');

 

執行結果:


 

console.log('hello %s',"word");
console.log('hello %s ','word');
console.trace();
console.log('hello %s');

執行結果:

 

例項:

console.time("01");

console.log('hello %s',"word");
console.log('hello %s ','word');
console.log('hello %s');

console.timeEnd("01");

 

執行結果:

 

 

Process

全域性變數,即global物件的屬性

1

exit
當程序準備退出時觸發。

2

beforeExit
node 清空事件迴圈,並且沒有其他安排時觸發這個事件。通常來說,當沒有程序安排時 node 退出,但是 'beforeExit' 的監聽器可以非同步呼叫,這樣 node 就會繼續執行。

3

uncaughtException
當一個異常冒泡回到事件迴圈,觸發這個事件。如果給異常添加了監視器,預設的操作(列印堆疊跟蹤資訊並退出)就不會發生。

4

Signal 事件
當程序接收到訊號時就觸發。訊號列表詳見標準的 POSIX 訊號名,如 SIGINTSIGUSR1 等。

 

例項:

process.on('exit',function (code) {
   setTimeout(function () {
       console.log("執行嗎?",0);
   }) ;
   console.log("不執行");
   console.log("退出碼:",code);
});

console.log("over");

執行結果:

程式結束時,觸發exit事件

其中涉及有關setTimeout的值賦值為0的思考:

不執行的原因:

Javascript在瀏覽器中是單執行緒執行的,必須在完成當前任務後,才能執行佇列中的下一個任務

同時javascript還維護著一個setTimeout佇列,用於儲存未執行的setTimeout任務,只有當普通程式執行完才執行setTimeout佇列中的函式

退出狀態碼

退出狀態碼如下所示:

狀態碼

名稱 & 描述

1

Uncaught Fatal Exception
有未捕獲異常,並且沒有被域或 uncaughtException 處理函式處理。

2

Unused
保留

3

Internal JavaScript Parse Error
JavaScript的原始碼啟動 Node 程序時引起解析錯誤。非常罕見,僅會在開發 Node 時才會有。

4

Internal JavaScript Evaluation Failure
JavaScript 的原始碼啟動 Node 程序,評估時返回函式失敗。非常罕見,僅會在開發 Node 時才會有。

5

Fatal Error
V8 裡致命的不可恢復的錯誤。通常會列印到 stderr ,內容為: FATAL ERROR

6

Non-function Internal Exception Handler
未捕獲異常,內部異常處理函式不知為何設定為on-function,並且不能被呼叫。

7

Internal Exception Handler Run-Time Failure
未捕獲的異常, 並且異常處理函式處理時自己丟擲了異常。例如,如果 process.on('uncaughtException') domain.on('error') 丟擲了異常。

8

Unused
保留

9

Invalid Argument
可能是給了未知的引數,或者給的引數沒有值。

10

Internal JavaScript Run-Time Failure
JavaScript的原始碼啟動 Node 程序時丟擲錯誤,非常罕見,僅會在開發 Node 時才會有。

12

Invalid Debug Argument 
設定了引數--debug / --debug-brk,但是選擇了錯誤埠。

128

Signal Exits
如果 Node 接收到致命訊號,比如SIGKILL SIGHUP,那麼退出程式碼就是128 加訊號程式碼。這是標準的 Unix 做法,退出訊號程式碼放在高位。

Process 屬性

Process 提供了很多有用的屬性,便於我們更好的控制系統的互動:

序號.

屬性 & 描述

1

stdout
標準輸出流。

2

stderr
標準錯誤流。

3

stdin
標準輸入流。

4

argv
argv 屬性返回一個數組,由命令列執行指令碼時的各個引數組成。它的第一個成員總是node,第二個成員是指令碼檔名,其餘成員是指令碼檔案的引數。

5

execPath
返回執行當前指令碼的 Node 二進位制檔案的絕對路徑。

6

execArgv
返回一個數組,成員是命令列下執行指令碼時,在Node可執行檔案與指令碼檔案之間的命令列引數。

7

env
返回一個物件,成員為當前 shell 的環境變數

8

exitCode
程序退出時的程式碼,如果程序優通過 process.exit() 退出,不需要指定退出碼。

9

version
Node 的版本,比如v0.10.18

10

versions
一個屬性,包含了 node 的版本和依賴.

11

config
一個包含用來編譯當前 node 執行檔案的 javascript 配置選項的物件。它與執行 ./configure 指令碼生成的 "config.gypi" 檔案相同。

12

pid
當前程序的程序號。

13

title
程序名,預設值為"node",可以自定義該值。

14

arch
當前 CPU 的架構:'arm''ia32' 或者 'x64'

15

platform
執行程式所在的平臺系統 'darwin', 'freebsd', 'linux', 'sunos' 'win32'

16

mainModule
require.main 的備選方法。不同點,如果主模組在執行時改變,require.main可能會繼續返回老的模組。可以認為,這兩者引用了同一個模組。