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)");