【发布时间】:2021-09-25 10:56:33
【问题描述】:
我知道 Javascript 是一种动态语言,它处理数据类型和运行时的方式与其他语言不同。
在下面的例子中:
var x = 5;
document.writeln(x + ", " + typeof(x)); //output: 5, number
x = "Hello";
document.writeln(x + ", " + typeof(x)); //ouput: Hello, string
当我更改x 的值时,它运行良好,没有任何问题。我很困惑,因为我知道,当 x 的类型为 number 时,它的内存大小与它的类型为 string 时不同,最后,它们是同一个变量。
我想知道它是如何工作的? x=5 和x="Hello" 是如何存储在内存中的,它们的数据类型不同,大小也不同?
更新
我的意思是,当 x 是 number 时,它会在内存中存储例如 4 个字节,当我创建 string 类型的 x 时,它将存储例如 8 个字节。这是怎么发生的?内存会将 x 的大小扩大到更大吗?还是会从内存中删除以前的空间并创建另一个空间?还是有不同的方法?
【问题讨论】:
-
JavaScript 引擎将简单地释放旧内存并在数据类型更改时保留新内存。我不确定你到底在问什么?这不是魔术,只是实现编程语言的一种可能方式。如果有人给你一个三页的解释它是如何工作的,你真的会对它感兴趣吗?我一点也不在乎。
-
我的意思是,当
x是 number 时,它会在内存中存储例如 4 个字节,而当我创建 stringx /b>,它将存储例如 8 个字节。这是怎么发生的?内存会将 x 的大小扩大到更大吗?还是会从内存中删除之前的空间并创建另一个空间? -
这取决于 JavaScript 引擎。 v8.dev/docs
标签: javascript variables web memory runtime