我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

本文中,苏南大叔的目光聚焦于JavaScriptconst关键字。const意思是常量,另外一个隐藏的意思就是不可修改。但是,事实真的是这样么?本文中通过几个例子,来解释const的不可更改性。颠覆三观。

苏南大叔:JavaScript,如何理解const关键字带来的不可修改性? - const-常量不可更改性
JavaScript,如何理解const关键字带来的不可修改性?(图4-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。本文测试环境:nodejs@20.18.0chrome@132.0.6834.84。被const定义的常量,并不是完全不能修改的,这就是本文的主要结论。

常量的不能修改性

const修饰的是常量。

const a = "sunan";
a = "苏南大叔";

试图修改的时候,会得到下面的错误提示信息:

Uncaught TypeError: Assignment to constant variable.

这就是大家通常概念里面的“常量不能被修改”。

苏南大叔:JavaScript,如何理解const关键字带来的不可修改性? - 运行结果
JavaScript,如何理解const关键字带来的不可修改性?(图4-2)

反转为 const 可修改

对常量进行修改的代码,如下:

const s = {name:"sunan"};
s.name = "苏南";
console.log(s); // {name: '苏南'}

这个代码没有任何报错,而且修改成功。

再次反转为 const不可修改

如果上述代码,改成这样,就又报错了,又变成不可修改的了。

const s = {name:"sunan"};
s = {name:"苏南"};
console.log(s);

报错:

Uncaught TypeError: Assignment to constant variable.

苏南大叔:JavaScript,如何理解const关键字带来的不可修改性? - 反转截图
JavaScript,如何理解const关键字带来的不可修改性?(图4-3)

再次反转

那么,结论是:被const修饰后,属性可修改,但整体不能修改。下面的写法里面,Object.freeze()后,属性也不能修改。

const s = {name:"sunan"};
Object.freeze(s);
s.name = "苏南";
console.log(s);

这个代码里面,虽然没有报错。但是代码修改object的属性,失败了。

苏南大叔:JavaScript,如何理解const关键字带来的不可修改性? - 修改失败
JavaScript,如何理解const关键字带来的不可修改性?(图4-4)

结论

对于基础数据类型,const冻结的值,值不可修改。而对于object对象,冻结的对象的引用。所以,修改对象的属性,可以。但是,修改对象本身的值,不行。如果想值也不能被修改,需要主动声明Object.freeze()

更多苏南大叔的js经验文章,请参考:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   js