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
程式執行完畢
好啦,本次記錄就到這裡了。
如果感覺不錯的話,請多多點贊支援哦。。。