成功更改 JS 中的不可变或原始数据类型。那么这些是原语还是 JS 概念是错误的?

2023-11-30

据我所知,JS 中有 4 个原语(直接存储值,而不是引用另一个内存位置的原语)-String, Number, Boolean, Symbol. 我没有数undefined, null- 因为它们是特殊的数据类型,并且不通过继承链共享对象构造函数.)

现在,另一个财产primitives是他们是Immutable or unchanging。它们的值不能改变。我的结论是,对于同一个变量,值不应该改变(永远)。

现在,请向我解释一下,在以下情况下 - 这些数据类型如何保持不变?

var str = "Good Morning";
var bool = true;
var num = 29;

str = str.replace("M", "Z");
bool = !bool;
num+=5;

console.log(str, bool, num);

对于相同的变量,我已经更改了所有 -string, bool, number。那么这些变量(各自的原始数据类型)在JS中如何是不可变的呢?


您不会改变现有的原语。你只是简单地分配new现有变量名称的原始值(也是不可变的)。

突变与变量名重新分配不同。突变看起来类似于以下内容:

someObj.someProp = newPropVal;

重新分配是:

someVarName = newVal;

基元没有自己的属性;尝试分配给基元的属性不会执行任何操作,并且会在严格模式下引发错误,因为基元是不可变的。

这是查看它的一种方法(这是一个很好的可视化,尽管它必然准确反映了字节码中实际发生的情况):值引用内存中的位置。变量名指向内存中的位置。比如说false对应内存位置1234,你创建一个对象{}它对应于内存位置9999。您可以分配false到一个变量名,并让该变量名指向内存中的位置 1234。您可以使用指向对象的位置 9999 来重新分配变量名称指向的值。与原始对象不同,对象是一个潜在的容器对于其他值(和其他内存位置)。原语不能充当这样的容器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

成功更改 JS 中的不可变或原始数据类型。那么这些是原语还是 JS 概念是错误的? 的相关文章

随机推荐