Let us go back to basics: “In JavaScript, are variables or constants immutable?”cover photo for immutability

The answer is neither, and if you even have a little hesitation on your answer, read on. Every programming language have different flavors and characteristics, and in JavaScript, this is one of the most important things to be aware of, especially while we are picking up a few languages like Python, Java, etc.

You may not necessarily change how you code in JavaScript immediately, but in knowing this early, it will prevent you from getting into nasty situations that are difficult to debug later on. I will include some ways you can adopt to prevent getting into such problems as well — different ways to do shallow & deep copy.

Just a quick summary before we begin:

Variables (initialised with let) — Re-assignable & Mutable

Constants (initialised with const) — Non re-assignable & Mutable


Before we explain mutability in JavaScript, let us quickly go through some basics… You may skip this part.

There are broadly a few groups of data types in JavaScript:

  1. Primitive (primary)— Boolean, Number, String
  2. Non-primitive (reference) or Objects — Object, Array, Function
  3. Special— Null, Undefined

Quick tip, you can use _console.log(typeof unknownVar)_ to figure out the data type of the variable you are dealing with

Primitive data types are Immutable by default

For primitive data types (like boolean, number and strings), they are **immutable **if they are declared as constants because for these data types, you cannot add any additional properties or mutate certain properties.

To ‘change/alter’ primitives, it simply means you have to reassign them, which is only possible if they are declared as variables.

let var1 = 'apple' //'apple' is stored in memory location A
var1 = 'orange' //'orange' is stored in memory location B

const var2 = 'apple'
var2 = 'orange' // ERROR: Re-assignment not allowed for constants

var1 is pointing to a different string at a different memory location

In the example above, if we edit the string for var1, JavaScript will simply create another string at another memory location and var1 will point to this new memory location, and this is called Re-assignment. This applies for all _primitive data types _regardless if they are declared as variables or constants.

And all constants cannot be re-assigned.

#javascript #programming #es6 #web-development #immutability

One of the first things to understand in JavaScript — Immutability
1.25 GEEK