5

这些是在 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返回 aHandle而其他人返回 a Local

我的假设是它与只有两个可能值的布尔值有关,但不幸的是,文档真的很差,没有提到这样的事情。

4

1 回答 1

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 的 true 和 false 值。AFAIK 这是虚拟机中一种经常使用的技术来减少创建对象的数量 - 例如,Java 实习生所有字符串文字,以及布尔和字节对象(即使在 JVM 规范中只提到了字符串,我我也看到它发生在小整数等)。

于 2012-09-01T20:03:24.060 回答