为了账号安全,请及时绑定邮箱和手机立即绑定

关键字“ const”不会使值不变。这是什么意思?

关键字“ const”不会使值不变。这是什么意思?

一只甜甜圈 2019-12-03 16:17:19
Axel Rauschmayer博士在探索ES6中有const定义:const就像let一样工作,但是您声明的变量必须立即初始化,并且其值以后不能更改。[…]const bar = 123;bar = 456;  // TypeError: `bar` is read-only然后他写道陷阱:const不会使值不变const 仅表示变量始终具有相同的值,但并不表示该值本身是不变的。我对此陷阱感到困惑。有人可以const用这个陷阱明确定义吗?
查看完整描述

3 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

MDN很好地总结了一下:


const声明创建对值的只读引用。这并不意味着它拥有的值是不可变的,只是不能重新分配变量标识符。例如,如果内容是对象,则意味着对象本身仍可以更改。


更简洁地说:const创建一个不可变的绑定。


换句话说:const与var一样,为您提供了可变的内存块,您可以在其中存储某些内容。但是,const指示您必须继续引用相同的内存块–您不能将变量重新分配给不同的内存块,因为变量引用是恒定的。


要真正使某些内容在声明后保持不变且不变,您需要使用Object.freeze()。但是,这很浅,仅适用于键/值对。冻结整个对象需要花费更多的精力。以高效的方式重复执行此操作更具挑战性。如果您确实有需要,建议您检查一下Immutable.js之类的内容


查看完整回答
反对 回复 2019-12-03
?
湖上湖

TA贡献2003条经验 获得超2个赞

当您使用constJavaScript制作内容时,您无法将变量本身重新分配为引用其他内容。但是,该变量仍可以引用可变对象。


const x = {a: 123};


// This is not allowed.  This would reassign `x` itself to refer to a

// different object.

x = {b: 456};


// This, however, is allowed.  This would mutate the object `x` refers to,

// but `x` itself hasn't been reassigned to refer to something else.

x.a = 456;

就字符串和数字之类的基元而言,const它更易于理解,因为您无需对值进行突变,而是为变量分配了一个新值。


查看完整回答
反对 回复 2019-12-03
  • 3 回答
  • 0 关注
  • 581 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号