67

I read this post, using delete keyword, we can delete JavaScript variable. But when I tried the same operations with constant but it is returning false when I try to delete constant. Is there any way to delete constants from memory? I tried this answer but its also not working.

9
  • what do mean you have tried this answer? that is - what exactly have you tried? Commented Jul 8, 2015 at 11:36
  • 3
    Constants are constants. If you read you're own links you will see that constants are not variables, ergo you can't redefine/delete constants Commented Jul 8, 2015 at 11:38
  • 1
    @AdrianPreuss, Is there any way to freeup memory used by constants? Commented Jul 8, 2015 at 11:38
  • 1
    @RoumelisGeorge, I am asking about ES6, Please check this MDN documentation. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… Commented Jul 8, 2015 at 11:43
  • 4
    Ok. As far as delete is concerned, delete is used to remove object attributes. That's is why it can only be used to remove global variables, that are considered part of the global object. Ex. you can do delete myObj.myVar, but you cannot do var myVar = 1; delete myVar. Commented Jul 8, 2015 at 11:47

4 Answers 4

48

You can't directly do it, looking at the specs show us that the value can be set, but not over-written (such is the standard definition of a constant), however there are a couple of somewhat hacky ways of unsetting constant values.

Using scope

const is scoped. By defining the constant in a block it will only exist for this block.

Setting an object and unsetting keys

By defining const obj = { /* keys */ } we define a value obj that is constant, but we can still treat the keys like any other variable, as is demonstrated by the examples in the MDN article. One could unset a key by setting it to null.

If it's memory management that is the concern then both these techniques will help.

Sign up to request clarification or add additional context in comments.

1 Comment

Re: "const is scoped. By defining the constant in a block it will only exist for this block." Brilliantly simple, thank you. In a development (ie. as yet unfinished) script, I needed to avoid declaring a const several times. After reading this I realised the most straightforward solution would be to declare the const in an IIFE.
38

The delete operator is actually for deleting an object property, not a variable. In fact, in strict mode, delete foo is a syntax error.

Usually you can "delete" a value/object by removing all references to it, e.g. assigning null to a variable.

However, since constants are not writable (by definition) there is no way to do this.

Comments

13

As I wrote on my comment, delete can only be used on objects and arrays. So, what you can actually do is store all your constants in a constant object and free up memory by deleting it's properties, like this:

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

delete myConstants.height;

Comments

3

Would this piece of code work or is it counterproductive?


export default function freeObject(object) {
  const keys = Object.keys(object)
  for (const key of keys) {
    delete object[key]
  }
}

1 Comment

No need to downvote without providing feedback. Take +10 for taking the time ;)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.