【问题标题】:How does JavaScript store null values internally?JavaScript 如何在内部存储空值?
【发布时间】:2012-12-12 10:41:01
【问题描述】:

我一直想知道 JavaScript 如何在内部存储 null 值。 null 不同于任何值。我想象作用域的变量存储在某种结构数组中,每个结构对应一个变量。这个结构是否有某种称为“null”的布尔属性?

我会自己在 V8 源代码中寻找它,但我在 C++ 代码中很迷失 :(

我在 Google 上找不到任何内容。大多数结果都与诸如“如何确定变量是未定义还是为空?”之类的问题有关。或类似的。

【问题讨论】:

  • 这可能取决于解释器,尽管我会惊讶地发现它与简单的零有很大不同。这不是一个真正重要的细节。
  • 请记住,有几个“假”值:null、undefined、false、0 等。更可能的是,每个变量上都有一个“type”字段来指示该值是否为 null 、未定义、数字、布尔值、对象等。
  • @Pointy 当然,这取决于解释器。如果它将空值存储为零,那么为什么(null === 0) 返回false
  • @AalexGabi 因为 internal 表示不需要暴露给 JS 开发者。
  • null 不同于任何值” - 17 也是如此。这是一种独特的位排列,取决于引擎。 nulltrue{ a: "b" } 相比,没有什么特别之处。除非您编写 C++ 代码(即使用 V8 嵌入),否则您永远不需要知道它。那时可能还没有。

标签: javascript c++ null internal


【解决方案1】:

JavaScript 作为一种弱类型的脚本语言,可能具有支持各种类型值的变体类型。我相信 PHP 使用相同类型的变量,尽管它们在其他语言中也是众所周知的,并且在 COM 自动化中发挥着重要作用。

它们基本上是包含类型和值的结构。该值可以是简单值,也可以是指向更大或更复杂值的指针。 null 只是支持的类型之一,在这种情况下,值本身不起作用。

但是由于 JavaScript 知道很多解释器,所以它的实现方式没有规则,这是你不应该担心的。通常,您只需要了解此类对时间要求严格的应用程序的底层技术,无论如何都不应该用 JavaScript 编写。

【讨论】:

  • null 不是一个单独的类型,真的;这是Object 参考值的空值。
  • 我说的是众所周知的变体记录中的实现。 Javascript 可能将null 描述为一种特殊类型的对象,但我高度怀疑内部是否真的存在一个对象。
  • @Pointy(虽然我有点惊讶typeof(null) 返回"object"。)
  • 请注意null === null,所以好像有一个null 值的单例实例。
  • 可能值得重复;这篇博文详细解释了 JavaScript 值的工作原理:wingolog.org/archives/2011/05/18/…
猜你喜欢
  • 1970-01-01
  • 2021-11-17
  • 2016-04-16
  • 2016-11-11
  • 2018-05-13
  • 2019-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多