什么可以防止 JavaScript 原语发生变异?

问题描述 投票:0回答:1

在C中,声明并初始化原语后,我们可以访问存储原语的内存地址并直接修改其值。然而,在 JavaScript 中,原始值是不可变的。例如,一旦创建了字符串,就无法对其进行修改。

我的问题是,是什么阻止我们简单地访问存储值的内存位置并直接改变值?这只是惯例吗?

我在其他地方读到,当在 JavaScript 中为变量分配原始值时,变量指向代表被分配的原始值的预先确定的内存位置,而不是内存中保存指定值的任意位置。例如,如果我写:

let a = 3;
let b = 3;

a
b
都应该指向表示值3的相同内存地址。因此,说JS解释为值3的内存地址现在保存值4是没有意义的。但是我我不确定我是否理解这个概念。如何有足够的内存位置来表示所有可能的原语?肯定是我误会了什么。

javascript variables memory immutability primitive
1个回答
0
投票

a 和 b 都应该指向表示值 3 的同一内存地址

这不是真的。

a
b
都指向保存值
3
的内存地址。这是否是同一个地址完全取决于 JavaScript 运行时。

如何有足够的内存位置来表示所有可能的原语?

“所有原始值”的内存没有预先分配。 JavaScript 根据需要分配内存。事实上,它可能会耗尽。考虑以下几点:

const arr = [];
for (let i = 0; i < SOME_HUGE_VALUE; ++i) {
   arr.push(i);
}

此示例中的任何内容都不能被垃圾收集,因此 JavaScript 被迫不断向

arr
添加值。如果尺寸足够大,这确实会崩溃。

© www.soinside.com 2019 - 2024. All rights reserved.