Skip to content

Instantly share code, notes, and snippets.

Last active April 13, 2024 05:10
Show Gist options
  • Star 49 You must be signed in to star a gist
  • Fork 13 You must be signed in to fork a gist
  • Save branneman/7fb06d8a74d7e6d4cbcf75c50fec599c to your computer and use it in GitHub Desktop.
Save branneman/7fb06d8a74d7e6d4cbcf75c50fec599c to your computer and use it in GitHub Desktop.
Primitive Types & Reference Types in JavaScript

Primitive Types & Reference Types in JavaScript

An explanation of JavaScript's pass-by-value, which is unlike pass-by-reference from other languages.


  • JavaScript has 2 kinds of variable types: primitive and reference.
  • A fixed amount of memory is reserved after creation of every variable.
  • When a variable is copied, it's in-memory value is copied.
  • Passing a variable to a function via a call also creates a copy of that variable.

Primitive Types

The in-memory value of a primitive type is it's actual value (e.g. boolean true, number 42). A primitive type can be stored in the fixed amount of memory available.

  • null
  • undefined
  • Boolean
  • Number
  • String

Primitive types are also known as: scalar types or simple types.

Reference Types

A reference type can contain other values. Since the contents of a reference type can not fit in the fixed amount of memory available for a variable, the in-memory value of a reference type is the reference itself (a memory address).

  • Array
  • Object
  • Function

Reference types are also known as: complex types or container types.

Code Examples

Copying a primitive:

var a = 13         // assign `13` to `a`
var b = a          // copy the value of `a` to `b`
b = 37             // assign `37` to `b`
console.log(a)     // => 13

The original was not changed, we can only change the copy.

Copying a reference:

var a = { c: 13 }  // assign the reference of a new object to `a`
var b = a          // copy the reference of the object inside `a` to new variable `b`
b.c = 37           // modify the contents of the object `b` refers to
console.log(a)     // => { c: 37 }

The original was also changed, since the reference got copied.

Copy link

Very helpful! Thanks ๐Ÿ‘

Copy link

basantkumarpogeyan commented Dec 20, 2018

โœŒExcellent explanation

Copy link

EugeCos commented Feb 22, 2019

Great explanation, thank you.
Wish I knew this before I spent a few hours trying to figure out why my object changes when I change its copy.

Copy link

Thanks , simple and clear explanation .

Copy link

wonderful article it is....thanks dude

Copy link

very clear, thanks!

Copy link

Concise, thanks!

Copy link

Clear to understand, Thanks!

Copy link

Thank you

Copy link

alfasin commented Jan 7, 2020


null is technically an object, try: typeof null
Arrays are also of type object.

What about Symbols?

Copy link

Thank you, I was having trouble understanding this concept and this explanation really helped.

Copy link

I always have to refresh on what the types are and how they work and this was clear and easy to understand. Thank you.

Copy link

Great explanation.Thank you ๐Ÿ‘๐Ÿ‘

Copy link

Thank, It was so clear ๐Ÿ‘

Copy link


Copy link

That's a good explanation! Thank you!

Copy link

GOod Explanation!! ;)

Copy link

That's so resourceful, thank you very much!

Copy link


Copy link

Great content ๐Ÿ˜Š๐Ÿ‘

Copy link


Copy link


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment