如何在ES6中取消设置Javascript常量?

Lax*_*nge 26 javascript ecmascript-6

我看了这篇文章,使用delete关键字,我们可以删除JavaScript变量.但是当我尝试使用常量进行相同的操作时,但是当我尝试删除常量时它返回false.有没有办法从内存中删除常量?我尝试了这个答案,但它也没有用.

Ton*_*igh 17

你不能直接这样做,看看规格告诉我们可以设置值,但不能覆盖(这是常量标准定义),但是有一些有点hacky方法来取消设置常量值.

使用范围

const范围的.通过在块中定义常量,它将仅存在于该块中.

设置对象和取消设置键

通过定义const obj = { /* keys */ }我们定义一个obj常量的值,但我们仍然可以像任何其他变量一样处理键,如MDN文章中的示例所示.可以通过将其设置为null来取消设置密钥.

如果关注内存管理,那么这两种技术都会有所帮助.


Fel*_*ing 16

delete运营商实际上是删除对象属性,而不是一个变量.实际上,在严格模式下,delete foo是语法错误.

通常,您可以通过删除对它的所有引用来"删除"一个值/对象,例如分配null给变量.

但是,由于常量不可写(根据定义),因此无法执行此操作.


Rou*_*rge 7

正如我在评论中写的那样,删除只能用于对象和数组.所以,你实际可以做的是将所有常量存储在一个常量对象中,并通过删除它的属性来释放内存,如下所示:

const myConstants = {};
myConstants.height = 100;

delete myConstants.height;
Run Code Online (Sandbox Code Playgroud)