DEV Community

Cover image for Primitive vs reference values in JavaScript
Pol Milian
Pol Milian

Posted on

1 1

Primitive vs reference values in JavaScript

In this post, we will take a look at a super common interview question: primitive vs reference values in JavaScript.

What is a primitive value?

In JS, there are 6 primitive values: number, string, boolean, undefined, null and symbol.

You can think of them as the base, hence the name primitive. These values are not objects and they don't have methods.

What is a reference value?

The short answer is: anything that is not a primitive value is a reference value. They are typeof "object". We are talking about objects, arrays, functions, etc.

Key differences

The key difference is how these values behave under the hood. Specifically, how they store their values in memory.

The primitive values would have the value in memory, while the reference values would have a reference to that location in memory (the memory address), and not the value itself.

For example:

let name = 'Jesus'
let nickName = name

name = 'Juan'

console.log(name) // 'Juan'
console.log(nickName) // 'Jesus'
Enter fullscreen mode Exit fullscreen mode

We are only using primitive values here, so everything makes sense. Right?

Now, let's take a look at a reference values example:

let jose = {
  type: 'Person',
  name: 'Jose'
}

let juan = jose

juan.name = 'Juan'

console.log(jose.name) // 'Juan'
console.log(juan.name) // 'Juan'
Enter fullscreen mode Exit fullscreen mode

See? In here, the juan variable is referencing the same spot in memory as the jose variable. That is why when we change the name property in one of them, we will be changing it in both.

This behavior also explains why if we compare two seemingly equal reference values, the result will be false. For example:

const fruit = {
  color: 'Yellow',
  name: 'Banana'
}

const snack = {
  color: 'Yellow',
  name: 'Banana'
}

fruit === snack // false
Enter fullscreen mode Exit fullscreen mode

So primitive types are compared by their value, while reference types are compared by their reference.

Lastly, remember that primitive values are immutable. So when you change a primitive value, what you are doing is replacing the in-memory value. You are not modifying it like you can do with reference values.

SurveyJS custom survey software

Simplify data collection in your JS app with a fully integrated form management platform. Includes support for custom question types, skip logic, integrated CCS editor, PDF export, real-time analytics & more. Integrates with any backend system, giving you full control over your data and no user limits.

Learn more

Top comments (0)

SurveyJS custom survey software

JavaScript Form Builder UI Component

Generate dynamic JSON-driven forms directly in your JavaScript app (Angular, React, Vue.js, jQuery) with a fully customizable drag-and-drop form builder. Easily integrate with any backend system and retain full ownership over your data, with no user or form submission limits.

Learn more

πŸ‘‹ Kindness is contagious

Please leave a ❀️ or a friendly comment on this post if you found it helpful!

Okay