What is the difference between primitive and reference data types in JavaScript?
Primitive data types like numbers and strings are immutable and stored by value. Reference data types like objects and arrays are mutable and stored by reference, meaning they point to a location in memory.
In JavaScript, data types are broadly categorized into two groups: primitive and reference types. Primitive types include string
, number
, boolean
, null
, undefined
, symbol
, and bigint
. These types are immutable, meaning their values cannot be changed once created. When you assign a primitive value to a variable, the variable holds the actual value, not a reference to it. For instance, if you assign a string 'hello'
to a variable x
, x
stores that value directly. If you copy x
into another variable y
, y
will store its own copy of the value, independent of x
. Reference types, on the other hand, include objects, arrays, and functions. These are mutable, meaning their contents can change, and they are stored by reference. When you assign an object or array to a variable, the variable holds a reference to the memory location where the data is stored, not the actual data itself. This means that if you copy a reference type from one variable to another, both variables point to the same location in memory. As a result, changes made to the object or array through one variable are reflected when accessed through the other. For example, if you have an array arr1
and assign it to arr2
, modifying arr2
will also affect arr1
, because both variables point to the same array in memory. Understanding the difference between primitive and reference types is crucial for working with JavaScript, as it influences how data is passed between functions and how changes to variables affect program state.