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

Axel Rauschmayer博士在探索ES6中有const定义:


const就像let一样工作,但是您声明的变量必须立即初始化,并且其值以后不能更改。[…]


const bar = 123;

bar = 456;  // TypeError: `bar` is read-only

然后他写道


陷阱:const不会使值不变


const 仅表示变量始终具有相同的值,但并不表示该值本身是不变的。


我对此陷阱感到困惑。有人可以const用这个陷阱明确定义吗?


一只甜甜圈
浏览 582回答 3
3回答

梵蒂冈之花

MDN很好地总结了一下:const声明创建对值的只读引用。这并不意味着它拥有的值是不可变的,只是不能重新分配变量标识符。例如,如果内容是对象,则意味着对象本身仍可以更改。更简洁地说:const创建一个不可变的绑定。换句话说:const与var一样,为您提供了可变的内存块,您可以在其中存储某些内容。但是,const指示您必须继续引用相同的内存块–您不能将变量重新分配给不同的内存块,因为变量引用是恒定的。要真正使某些内容在声明后保持不变且不变,您需要使用Object.freeze()。但是,这很浅,仅适用于键/值对。冻结整个对象需要花费更多的精力。以高效的方式重复执行此操作更具挑战性。如果您确实有需要,建议您检查一下Immutable.js之类的内容

湖上湖

当您使用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它更易于理解,因为您无需对值进行突变,而是为变量分配了一个新值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript