4

是否boolean在内存中存储为 32 位整数?null值呢?

在《Speaking Javascript 》一书中,它指的是一种类型标签,用于指示存储在内存中的值的类型。例如,类型的类型标签Object是 000。什么是类型标签?

如何找到值类型的类型标记,例如 abooleanstring

4

1 回答 1

3

来自 Andy Wingo关于该主题的博客文章:

最初,所有 JavaScript 实现都使用标记指针来表示 JS 值。这是一个古老的技巧,源于观察到分配的内存至少占用 4 或 8 个字节,并以最低有效位或 3 位为零的方式对齐。

因此类型标签允许统一存储所有值。所有值都占用一个机器字(32/64 位),并且根据标签(这是最低有效位或位),它们被解释为指向对象的指针或某些整数/布尔值/等,具体取决于标签。

布尔值是否在 js 内存中存储为 32 字节整数?

一个布尔值也占一个词。要获得更具体的答案,我需要查看 v8 源代码。但是如果我没记错的话,true并且false被表示为根指针。

如何获取值类型的类型标签(布尔值,未定义,字符串,数字);

没有办法从 JavaScript 做到这一点。这是内部实现细节。

于 2015-09-23T20:41:59.533 回答