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.
-
what do mean you have tried this answer? that is - what exactly have you tried?Kuba Wyrostek– Kuba Wyrostek2015-07-08 11:36:40 +00:00Commented Jul 8, 2015 at 11:36
-
3Constants are constants. If you read you're own links you will see that constants are not variables, ergo you can't redefine/delete constantsAdrian Preuss– Adrian Preuss2015-07-08 11:38:21 +00:00Commented Jul 8, 2015 at 11:38
-
1@AdrianPreuss, Is there any way to freeup memory used by constants?Laxmikant Dange– Laxmikant Dange2015-07-08 11:38:59 +00:00Commented 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/…Laxmikant Dange– Laxmikant Dange2015-07-08 11:43:14 +00:00Commented Jul 8, 2015 at 11:43
-
4Ok. 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.Roumelis George– Roumelis George2015-07-08 11:47:54 +00:00Commented Jul 8, 2015 at 11:47
4 Answers
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.
1 Comment
const several times. After reading this I realised the most straightforward solution would be to declare the const in an IIFE.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
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]
}
}