d8 中有用的內建函式和物件
除了在 EcmaScript 語言規範和 EcmaScript 國際化 API 規範中定義的庫之外,d8 還實現了以下函式和物件。
print(args...): function
。列印到stdout
。printErr(args...): function
。列印到stderr
。write(args...): function
。與print
相同,但最後沒有換行符。read(filename): function
。從檔案中讀取文字並作為String
返回。readbuffer(filename): function
。從檔案中讀取二進位制檔案並作為ArrayBuffer
返回。readline(): function
。從stdin
讀取行。使用'\'
進行多行輸入。load(filename): function
。載入並執行 JavaScript 檔案。quit([exitCode]): function
。退出並帶有可選的退出程式碼。version(): function
。返回版本程式碼為String
。os: object
。與作業系統相關的實用程式,僅適用於 POSIX。os.system(command): function
:執行系統命令。os.chdir(path): function
:更改當前目錄。os.setenv(name, value): function
:設定環境變數。os.unsetenv(name): function
:取消設定環境變數。os.umask(alue) function
:呼叫 umask 系統呼叫並返回舊的 umask。os.mkdirp(path[, mask]): function
:建立一個目錄。掩碼(如果存在)與當前 umask 一起使用。如有必要,將建立中間目錄。os.rmdir(path): function
:刪除目錄。
performance: object
:用於效能分析。performance.now(): function
。將時間戳記返回為 double,以毫秒為單位。
Worker: object
:從 HTML5 Web Worker 修改 (詳見下面的示例)Realm: object
:建立和管理隔離環境(領域)。Realm.create(): function
:使用不同的安全令牌建立一個新領域並返回其索引。Realm.createAllowCrossRealmAccess(): function
:建立一個與當前領域具有相同安全性令牌的新域並返回其索引。Realm.current(): function
:返回當前活動領域的索引。全域性範圍指數為 0。Realm.global(i): function
:返回領域 i 的全域性物件。Realm.owner(globalObj): function
:返回建立 globalObj 的域的索引。Realm.eval(i, s): function
:在領域 i 中評估 s 並返回結果。Realm.switch(i): function
:切換到領域 i 以獲得連續的互動式輸入。Realm.dispose(i): function
:處理對領域的引用 i。Realm.shared: object
:跨域的單個共享值的訪問器。
詳細的實現和註釋可以在 d8.h , d8.cc , d8-posix.cc 和 d8-windows.cc 中找到 。
例:
print("Hello World!");
write("Hello ");
write("again!\n");
printErr("Nothing went wrong.");
write("Your name: ");
var name = readline();
print("Hello, ", name, "!");
load("external.js");
var string = read("text.txt");
var buffer = readbuffer("binary.bin");
print("Version: ", version());
quit(0); // bye
工人示例:
main.js
var workerScript = read("worker.js");
var worker = new Worker(workerScript);
worker.postMessage(12);
worker.js
onmessage = ev => {
print(ev); // 12
};
領域的例子:
print(Realm.current()); // 0
var rIndex = Realm.create();
print(rIndex); // 1
Realm.eval(rIndex, "var x = 100");
Realm.eval(rIndex, "print(x)"); // 100
var result = Realm.eval(rIndex, "x * 2");
print(result); // 200
Realm.eval(rIndex, "var rIndex2 = Realm.create()");
Realm.eval(rIndex, "print(rIndex2)"); // 2
Realm.eval(rIndex, "print(Realm.owner(this))"); // 1
try {
var childGlobal = Realm.global(rIndex);
print(childGlobal); // error
} catch (e) {
print("Global object cannot be read/written cross-realm.");
}
var rIndex3 = Realm.createAllowCrossRealmAccess();
Realm.eval(rIndex, "var x = 50");
var childGlobal = Realm.global(rIndex3);
childGlobal.x++;
Realm.eval(rIndex3, "print(x)"); // 51
try {
Realm.dispose(rIndex3);
Realm.eval(rIndex3, "print(x)"); // error
} catch (e) {
print("The realm is dereferenced");
}
Realm.shared = "Hello from another world";
Realm.eval(rIndex, "print(Realm.shared)");