Left Arrow



A square with the letters 'JS' and the word 'variables' next to it.

JavaScript Variables


Status: decay

2 people taken hostange. Sitting back-to-back with a rope tied around both of them.


A variable is a binding between a name and a value. A variable is:

  • declared when a const, let or var keyword is used with a name: let myVar
  • initialized when an initial value is assigned to it: myVar = 1
  • reassigned when its value changes: myVar = 2

Although you can declare and initialize a variable on the same line of code: let myVar = 1, the engine will declare and initialize it in 2 different steps.

A Nintendo Entertainment System and an arcade machine.

Primitive vs Object Binding



Imagine you owned a Nintendo console with your favourite game. Only you can play it. You set the high-score and stop playing. Later, you come back to play again. You still hold the high-score.

Your local arcade has the same game. You don't own the arcade machine, you only have the street address of the arcade. You go there, play it and get the high score. A week later, you come back. Your high-score is no longer there. Another player who also had street address of the arcade beat your high-score.

A primitive binding is like owning your own copy of a game. Only you can set the high-score. An object binding is like an arcade machine. You don't own it, you only have the street address. You can set the high-score, but so can others.

JavaScript has 7 types:

  • null
  • undefined
  • boolean
  • string
  • number
  • symbol
  • object

All the types are primitives except for object.

  • When you assign a primitive to a variable, let myVar = 1, the value 1 is bound to the name myVar.
  • When you assign an object to a variable, let myVar = { a: 1 }, the value isn't bound to myVar. Instead, an object reference is bound to myVar. The memory address of { a: 1 }.
Code showing before and after compile time of a variable storing an object. Before, the value is an object. After the value is a memory address

When assigning or passing variables of a primitive, a copy of the value is created.


// primitive binding
var var1 = 1
var var2 = var1
var var3 = var1


When assigning or passing variables of an object, a copy of the reference is created. If 2 variables are assigned the same object, changing the value of 1 will change the other.


// object binding
var var1 = { a: 1 }
var var2 = var1
var var3 = var1


When comparing objects using the equality opertor, ===, the results can be unintuitive. See Referential Equality for details.

A painting Declaration of Independence - John Trumbull, 1818.


Redeclaring a var will result in a no-op (nothing will happen on any additional declarations). Redeclaring a const or let results in an error.


let myVar;
let myVar;
2 characters in an arcade game about to fight.

undefined vs undeclared

undefined is the default value of a variable or property.


let myVar;

Attempting to access a variable that hasn't been declared throws a reference error. Although the error states myVar is not defined, a more accurate description is myVar is undeclared.



Be aware, the typeof operator returns "undefined" for an undeclared variable.


console.log(typeof myVar)

Where to Next?

Arrow pointing downYOU ARE HERE
A sci-fi robot taxi driver with no lower body