Module 基礎模組

模組global

全域對象,所有腳本均可存取的基礎對象

物件

Buffer

二進位資料緩存對象,用於io讀寫的資料處理,參見Buffer對象。

1
Buffer global.Buffer;

URL

創建一個UrlObject請求對象,參見UrlObject

1
UrlObject global.URL;

TextDecoder

TextDecoder解碼對象,參見TextDecoder對象。

1
TextDecoder global.TextDecoder;

TextEncoder

TextEncoder編碼對象,參見TextEncoder對象。

1
TextEncoder global.TextEncoder;

console

控制台存取對象

1
console global.console;

process

行程對象

1
process global.process;

performance

基礎效能監控模組

1
performance global.performance;

靜態函數

run

運行一個腳本

1
static global.run(String fname);

呼叫參數:

  • fname: String, 指定要執行的腳本路徑

require

載入一個模組並返回模組對象,更多資訊參考@ref module

1
static Value global.require(String id);

呼叫參數:

  • id: String, 指定要載入的模組名稱

回傳結果:

  • Value, 傳回載入模組的引出對象

require 可用於載入基礎模組,檔案模組。

基礎模組是沙箱創建時初始化的模組,引用時只需傳遞對應的id,例如require("net")。

文件模組是使用者自訂模組,引用時需傳遞以./ 或../ 開頭的相對路徑。檔案模組支援.js, .jsc 和 .json文件。

檔案模組也支援package.json 格式,當模組為目錄結構時,require 會先查詢package.json 中的main,而未發現則嘗試載入路徑下的index.js, index.jsc 或index.json。

若引用路徑不是./ 或../ 開頭,且非基礎模組,require 從目前模組所在路徑下的node_modules 查找,並上級目錄遞歸。

基礎流程如下:

%0 start start is_native is internal module? start->is_native resolve path.resolve has_file module exists? resolve->has_file search recursive lookup node_modules from the current path search->has_file load load end end load->end is_native->end Yes is_mod is module? is_native->is_mod No is_mod->search Yes is_abs is absolute? is_mod->is_abs No is_abs->resolve No is_abs->has_file Yes has_file->load Yes has_ext module.js exists? has_file->has_ext No has_ext->load Yes has_package /package.json exists? has_ext->has_package No has_main main exists? has_package->has_main Yes has_index index.js exists? has_package->has_index No has_main->load Yes has_main->has_index No has_index->load Yes has_index->end No

setTimeout

在指定的時間後呼叫函數

1 2 3
static Timer global.setTimeout(Function callback, Number timeout = 1, ...args);

呼叫參數:

  • callback: Function, 指定回呼函數
  • timeout: Number, 指定延時的時間,以毫秒為單位。超過2^31 的話,立即執行。
  • args: ..., 額外的參數,傳入到指定的callback 內,可選。

回傳結果:

  • Timer, 傳回定時器對象

clearTimeout

清除指定的計時器

1
static global.clearTimeout(Value t);

呼叫參數:

  • t: Value, 指定要清除的定時器

setInterval

每間隔指定的時間後呼叫函數

1 2 3
static Timer global.setInterval(Function callback, Number timeout, ...args);

呼叫參數:

  • callback: Function, 指定回呼函數
  • timeout: Number, 指定間隔的時間,以毫秒為單位。超過2^31 的話,立即執行。
  • args: ..., 額外的參數,傳入到指定的callback 內,可選。

回傳結果:

  • Timer, 傳回定時器對象

clearInterval

清除指定的計時器

1
static global.clearInterval(Value t);

呼叫參數:

  • t: Value, 指定要清除的定時器

setHrInterval

每間隔指定的時間後呼叫函數,這是一個高精度計時器,會主動打斷正在執行的JavaScript 腳本執行計時器

1 2 3
static Timer global.setHrInterval(Function callback, Number timeout, ...args);

呼叫參數:

  • callback: Function, 指定回呼函數
  • timeout: Number, 指定間隔的時間,以毫秒為單位。超過2^31 的話,立即執行。
  • args: ..., 額外的參數,傳入到指定的callback 內,可選。

回傳結果:

  • Timer, 傳回定時器對象

由於setHrInterval 的計時器會中斷正在運行的程式碼執行回調,因此不要在回調函數內修改可能影響其它模組的數據,或者在回調中呼叫任何標記為async 的api 函數,否則將會產生不可預測的結果。例如:

1 2 3 4 5 6 7 8 9 10
var timers = require('timers'); var cnt = 0; timers.setHrInterval(() => { cnt++; }, 100); while (cnt < 10); console.error("===============================> done");

這段程式碼中,第8 行的迴圈並不會因為cnt 的改變而結束,因為JavaScript 在優化程式碼時會認定在這個循環過程中cnt 不會被改變。


clearHrInterval

清除指定的計時器

1
static global.clearHrInterval(Value t);

呼叫參數:

  • t: Value, 指定要清除的定時器

setImmediate

下一個空閒時間立即執行回呼函數

1 2
static Timer global.setImmediate(Function callback, ...args);

呼叫參數:

  • callback: Function, 指定回呼函數
  • args: ..., 額外的參數,傳入到指定的callback 內,可選。

回傳結果:

  • Timer, 傳回定時器對象

clearImmediate

清除指定的計時器

1
static global.clearImmediate(Value t);

呼叫參數:

  • t: Value, 指定要清除的定時器

btoa

base64方式編碼數據

1 2
static String global.btoa(Buffer data, Boolean url = false);

呼叫參數:

  • data:Buffer, 要編碼的數據
  • url: Boolean, 指定是否使用url安全字元編碼

回傳結果:

  • String, 返回編碼的字串

atob

base64方式解碼字串為二進位數據

1
static Buffer global.atob(String data);

呼叫參數:

  • data: String, 要解碼的字串

回傳結果:

  • Buffer, 返回解碼的二進位數據

gc

強制要求進行垃圾回收

1
static global.gc();

靜態屬性

global

Object, 全域對象

1
static readonly Object new global;

globalThis

Object, 全域對象

1
static readonly Object global.globalThis;