我正在阅读Professional JavaScript for Web Developers 第三版。在第 4 章的总结中,可以阅读:
JavaScript 变量中可以存储两种类型的值:原始值和引用值。原始值具有五种原始数据类型之一:Undefined、Null、Boolean、Number 和 String。原始值和参考值具有以下特征:
- 原始值具有固定大小,因此存储在堆栈的内存中。
但我可以有不同的字符串,比如:
var a = "ABC";
// 或者
var b = "一些非常烦人的长字符串......"
它们的大小明显不同,那么如何在堆栈上分配它们呢?
我相信同样的问题可以问到数字......
所以我肯定在这里遗漏了一些重要的东西。
有人可以解释为什么字符串/数字的大小是固定的以及它们如何存储在堆栈中吗?
字符串(通常是数字)的大小不固定,并且不会完整存储在堆栈上,但在语言中,它们的行为就像可以存储在堆栈上一样。
由实现该语言的人决定如何在内部存储数据。通常,数据根据值以不同的方式存储。
尽管 JavaScript 中的数字始终表现为双精度浮点数,但当数字恰好是整数值时,通常会以不同的方式存储它们。一些 JavaScript 引擎使用未使用的 double 值作为整数值,其他一些引擎将整数存储在值本身中,并将 double 值存储在堆上。
对于字符串,某些数据可以存储在堆栈上的项目中,例如长度和对存储在堆上的字符串内容的引用。对于短字符串,字符可以代替引用放入堆栈中的值中,因此不需要堆上的额外数据。