Storing by value vs Storing by reference in Javascript
Primitive values are stored by value, while Objects are stored by reference. The main primitive values are Number
, Boolean
, String
, null
and undefined
(people will argue the last two are actually values, but they follow the same rules in memory storage when compared to primitive values). The "complex" values (as of ECMAScript 262 Ed. 3) are Object
, Array
, Function
, Date
, Error
and RegExp
. Here's an example:
var a = 10
var b = a
a // returns 10
b // returns 10
a = 20
a // returns 20
b // returns 10
in contrast to
var a = {}
var b = a
a // returns {}
b // returns {}
a.foo = "bar"
a // returns {foo: "bar"}
b // returns {foo: "bar"}
As a good exercise, comparing complex objects is made by reference, not value. This means that you are really comparing the memory address they are being stored at
var a = { foo: "bar" }
var b = { foo: "bar" }
a === b // returns false
b = a
a === b // returns true
Written by Jose Jesus Perez Aguinaga
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
#Javascript
Authors
Related Tags
#javascript
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#