【问题标题】:How to unset a Javascript Constant in ES6?如何在 ES6 中取消设置 Javascript 常量?
【发布时间】:2015-09-26 06:58:51
【问题描述】:

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

【问题讨论】:

  • 你试过这个答案是什么意思?那就是 - 你到底尝试了什么?
  • 常量是常量。如果您阅读您自己的链接,您会发现常量不是变量,因此您无法重新定义/删除常量
  • @AdrianPreuss,有没有办法释放常量使用的内存?
  • @RoumelisGeorge,我在询问 ES6,请查看此 MDN 文档。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 好的。就delete而言,delete是用来删除对象属性的。这就是为什么它只能用于删除全局变量,这些变量被认为是全局对象的一部分。前任。你可以删除 myObj.myVar,但你不能做 var myVar = 1;删除 myVar。

标签: javascript ecmascript-6


【解决方案1】:

您不能直接执行此操作,查看规范告诉我们该值可以设置,但不能被覆盖(例如 standard definition of a constant),但是有一些有点老套的方法可以取消设置常量价值观。

使用范围

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

设置对象和取消设置键

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

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

【讨论】:

  • Re: "const 是作用域的。通过在块中定义常量,它将只存在于该块中。" 非常简单,谢谢。在开发(即尚未完成)脚本中,我需要避免多次声明const。阅读本文后,我意识到最直接的解决方案是在 IIFE 中声明 const
【解决方案2】:

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

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

但是,由于常量是不可写的(根据定义),所以没有办法做到这一点。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-12-08
      • 2017-02-07
      • 2011-08-10
      • 1970-01-01
      • 2016-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-07
      相关资源
      最近更新 更多