据我了解,string
JavaScript 中的(基本)类型是原始类型,这意味着它的变量是在堆栈上分配的。
我原以为要在堆栈上分配一个类型,它需要有一个固定的大小——这可能适用于其他原始类型,如boolean
,number
等。
我是否有某种错误的假设,或者是否有其他一些内部魔法用于string
在 JavaScript 原始类型中创建 s?
编辑:当人们认为 JavaScript 是松散类型时,这会变得更加复杂。这让我想知道如何在堆栈上分配任何局部变量......鉴于在函数过程中可能分配给它的大小不是固定的。
但我想(可能是简化的)答案可能是所有局部变量都可以在堆栈上分配一个固定的最大大小。假设这是 8 个字节,我认为这是number
类型的大小,并且应该足够大以容纳所有其他原始类型(除了string
) 以及内存地址(当为局部变量分配引用类型时)。但是,字符串肯定不能限制为 8 个字节(或任何大小)。这让我得出结论,字符串(即使是原始类型的)没有(不能)分配在堆栈上。因此,JavaScript 中的术语“原始类型”被用来表示“基本/构建块”类型,而不是必须在堆栈上分配的类型(与我在包括“Professional JavaScript.. .”尼古拉斯·扎卡斯)。
任何人有任何其他看法或指向一个好的来源谈论这个?