Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
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.

Facts

  • 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.

@katherinedragieva

This comment has been minimized.

Copy link

@katherinedragieva katherinedragieva commented Nov 17, 2018

Very helpful! Thanks 👍

@basantkumarpogeyan

This comment has been minimized.

Copy link

@basantkumarpogeyan basantkumarpogeyan commented Dec 20, 2018

Excellent explanation

@EugeCos

This comment has been minimized.

Copy link

@EugeCos 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.

@bakhti-uzb

This comment has been minimized.

Copy link

@bakhti-uzb bakhti-uzb commented Apr 4, 2019

Thanks , simple and clear explanation .

@sobhardwaj

This comment has been minimized.

Copy link

@sobhardwaj sobhardwaj commented Jun 27, 2019

wonderful article it is....thanks dude

@AlisonYoon

This comment has been minimized.

Copy link

@AlisonYoon AlisonYoon commented Aug 23, 2019

very clear, thanks!

@JessTheDev

This comment has been minimized.

Copy link

@JessTheDev JessTheDev commented Sep 15, 2019

Concise, thanks!

@Julitree

This comment has been minimized.

Copy link

@Julitree Julitree commented Nov 27, 2019

Clear to understand, Thanks!

@AhmadIbrahiim

This comment has been minimized.

Copy link

@AhmadIbrahiim AhmadIbrahiim commented Dec 4, 2019

Thank you

@alfasin

This comment has been minimized.

Copy link

@alfasin alfasin commented Jan 7, 2020

Thanks!

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

What about Symbols?

@mshuber1981

This comment has been minimized.

Copy link

@mshuber1981 mshuber1981 commented Feb 12, 2020

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

@SpyrosKo

This comment has been minimized.

Copy link

@SpyrosKo SpyrosKo commented Apr 29, 2020

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

@mrsindelic

This comment has been minimized.

Copy link

@mrsindelic mrsindelic commented Oct 7, 2020

Great explanation.Thank you 👍👏

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.