【问题标题】:How can JS handle different datatypes for the same variable?JS 如何处理同一个变量的不同数据类型?
【发布时间】: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=5x="Hello" 是如何存储在内存中的,它们的数据类型不同,大小也不同?

更新

我的意思是,当 xnumber 时,它会在内存中存储例如 4 个字节,当我创建 string 类型的 x 时,它将存储例如 8 个字节。这是怎么发生的?内存会将 x 的大小扩大到更大吗?还是会从内存中删除以前的空间并创建另一个空间?还是有不同的方法?

【问题讨论】:

标签: javascript variables web memory runtime


【解决方案1】:

我认为你部分正确。为了理解这一点,您需要了解 javascript 中的 (Primitive and reference ) 类型。变量 x 在 javascript 中是原始的。另一方面,对象、函数、数组是引用类型。当我们在 javascript 中声明一个原始类型时,它会在内存中分配空间。当我们调用它时,它会传递具有特定内存空间的值。因此,当我们重新分配时,它不会删除以前的空间,而是将新值重新定位到另一个空间。对于引用类型,这是不同的。

你可以验证我对这个例子的回答:

变量 x=10; 控制台.log(x)

x=“你好” 控制台.log(x)

或者您可以查看 mdn 文档中的前置类型。

【讨论】:

    猜你喜欢
    • 2017-06-04
    • 2017-01-16
    • 2019-05-04
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 2020-12-08
    相关资源
    最近更新 更多