存储在堆栈中的 Javascript 字符串

5 javascript primitive stack

我正在阅读Professional JavaScript for Web Developers 第三版。在第 4 章的总结中,可以阅读:

JavaScript 变量中可以存储两种类型的值:原始值和引用值。原始值具有五种原始数据类型之一:Undefined、Null、Boolean、Number 和 String。原始值和参考值具有以下特征:

  • 原始值具有固定大小,因此存储在堆栈的内存中。

但我可以有不同的字符串,比如:

var a = "ABC";

// 或者

var b = "一些非常烦人的长字符串......"

它们的大小明显不同,那么如何在堆栈上分配它们呢?

我相信同样的问题可以问到数字......

所以我肯定在这里遗漏了一些重要的东西。

有人可以解释为什么字符串/数字的大小是固定的以及它们如何存储在堆栈中吗?

Guf*_*ffa 4

字符串(通常是数字)的大小不固定,并且不会完整存储在堆栈上,但在语言中,它们的行为就像可以存储在堆栈上一样。

由实现该语言的人决定如何在内部存储数据。通常,数据根据值以不同的方式存储。

尽管 JavaScript 中的数字始终表现为双精度浮点数,但当数字恰好是整数值时,通常会以不同的方式存储它们。一些 JavaScript 引擎使用未使用的 double 值作为整数值,其他一些引擎将整数存储在值本身中,并将 double 值存储在堆上。

对于字符串,某些数据可以存储在堆栈上的项目中,例如长度和对存储在堆上的字符串内容的引用。对于短字符串,字符可以代替引用放入堆栈中的值中,因此不需要堆上的额外数据。

  • “对于短字符串,字符可以适合堆栈中的值而不是引用,因此不需要堆上的额外数据。” 您对此有什么参考吗?我想知道这是不是真的。 (2认同)