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

时间:2015-07-08 11:33:51

标签: javascript ecmascript-6

我看过this帖子,使用delete关键字,我们可以删除JavaScript变量。但是当我尝试使用常量进行相同的操作时,但是当我尝试删除常量时它返回false。有没有办法从内存中删除常量? 我试过this回答,但它也没有用。

3 个答案:

答案 0 :(得分:12)

delete运算符实际上是用于删除对象属性,而不是变量。实际上,在严格模式下,delete foo is a syntax error

通常你可以通过删除对它的所有引用来“删除”一个值/对象,例如将null分配给变量。

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

答案 1 :(得分:12)

你不能直接这样做,查看规格告诉我们可以设置值,但不能覆盖(例如standard definition of a constant),但是有一些有点hacky不设定常数值的方法。

使用范围

constscoped。通过在块中定义常量,它只存在于该块中。

设置对象并取消设置键

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

如果问题是memory management,那么这两种技术都会有所帮助。

答案 2 :(得分:7)

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

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

delete myConstants.height;