在JavaScript Harmony / ECMAScript 6中删除或覆盖常量变量

8

阅读并尝试使用ECMAScript 6提供的新功能。

用于编写常量变量的新“const”语句是一个巧妙的功能,它为已经很有趣的更新添加了一些功能。

该变量被创建为只读,一旦声明就无法覆盖。

编辑:一个相关问题出现了,例如,在控制台上测试代码时。运行包含const定义的脚本两次会导致错误,从而中断执行。

如果我想“释放”该关键字怎么办?是否有任何方法可以取消设置或删除变量?

我在这篇文章中读到,这实际上是一个影响var语句的问题,因为变量创建的环境在许多抽象层面上都不同。

ECMAScript 6打算如何解决这个问题?


没有任何理由去取消/删除一个常量,因此在ES6中不可能这样做。你为什么想要这样做呢? - Bergi
1
如果你想要改变它,为什么一开始要声明为const?ECMAScript 6并不打算解决这个问题,因为const就是const。如果你想要的话,可以在内部作用域中使用let声明一个同名的不同变量。 - user663031
5
举个例子,如果我在控制台上测试一些代码,声明一个常量两次(例如再次运行脚本)会抛出一个错误,这可能导致刷新页面,浪费您所做的所有缓存更改。这实际上就是我提出这个问题的原因。 - Moleskine
1
这似乎不是有充分理由去做的事情。也许可以使用像Jasmine这样的测试工具,而不是控制台? - atmd
我所说的“test”,实际上是指“尝试”。我不是以英语为母语,可能用词不当。 - Moleskine
2个回答

7

无法重新定义使用 const 声明的变量。

然而,const 是块级作用域。为了解决您描述的问题,在控制台中测试代码时,您只需要将脚本包装在 {} 中即可:

{ const x = 1; }
{ const x = 2; }

请注意,许多已经支持 const 关键字的浏览器尚未支持块作用域常量,因此上面的示例在 Chrome 和 Firefox 中将失败(有关更多信息,请参见 Kangax 的兼容性表)。

我明白了,你的意思是直接实现不可能,但答案在于作用域,对吧?很有道理。看起来他们正在努力解决作用域问题,引入了let和const。 - Moleskine

-4

知道了 - const a = {}; var b = new a; a = 33; 我刚把常量 'a' 改回了变量。


抱歉...const work = {}; var dd = work; dd = 99; work = 22; 它返回的是22,应该返回你设置的任何值,但它的默认值将是未定义的对象。 - davidLeak
4
无法给const常量分配新值,这正是使用const的全部意义。 - Felix Kling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接