这些是在V8 C ++ API中创建新原语的函数:
Handle<Boolean> v8::Boolean::New(bool value)
Local<Number> v8::Number::New(double value)
Local<String> v8::String::New(const char *data, int length=-1)
我想知道为什么Boolean
会返回Handle
而其他人返回Local
。
我的假设是,它与只有两个可能值的布尔有关,但不幸的是,文档真的很差,并且没有提到类似的东西。
答案 0 :(得分:5)
这是Boolean :: New的实现:(v8.h)
Handle<Boolean> Boolean::New(bool value) {
return value ? True() : False();
}
以下是我们从api.cc获得的信息:
v8::Handle<Boolean> True() {
i::Isolate* isolate = i::Isolate::Current();
if (!EnsureInitializedForIsolate(isolate, "v8::True()")) {
return v8::Handle<Boolean>();
}
return v8::Handle<Boolean>(
ToApi<Boolean>(isolate->factory()->true_value()));
}
看起来他们正在为每个Isolate实现真值和假值。 AFAIK这是虚拟机中经常使用的一种技术,用于减少创建对象的数量 - 例如,Java实习生所有字符串文字,以及布尔和字节对象(即使仅在JVM规范中为字符串提及实习,我'我们也看到它发生在小整数等等。)。