- Published on
Day14: JS Reference VS Copy
- Authors

- Name
- irisjustdoit
- @irisjustdoit
Introduction: Understanding the differences between Reference and Copy in JavaScript, exploring various methods for copying arrays and objects.
Copying Primitive Data Types
let age = 100
let age2 = age
console.log(age, age2) // 100, 100
age = 200
console.log(age, age2) // 200, 100
let name = 'Wes'
let name2 = name
console.log(name, name2) // Wes, Wes
name = 'wesley'
console.log(name, name2) // wesley, Wes
Array Reference and Copy
const players = ['Wes', 'Sarah', 'Ryan', 'Poppy']
// Direct assignment creates a reference, both variables point to the same array
const team = players
console.log(players, team) // ['Wes', 'Sarah', 'Ryan', 'Poppy'], ['Wes', 'Sarah', 'Ryan', 'Poppy']
// Modifying team affects players
team[3] = 'Lux'
console.log(players, team) // ['Wes', 'Sarah', 'Ryan', 'Lux'], ['Wes', 'Sarah', 'Ryan', 'Lux']
// Using slice() method to copy array
const team2 = players.slice()
// Using concat() method to copy array
const team3 = [].concat(players)
// Using ES6 spread operator to copy array
const team4 = [...players]
team4[3] = 'heeee hawww'
console.log(team4) // ['Wes', 'Sarah', 'Ryan', 'heeee hawww']
// Using Array.from() method to copy array
const team5 = Array.from(players)
Object Reference and Copy
const person = {
name: 'Wes Bos',
age: 80,
}
// Direct assignment creates a reference, both variables point to the same object
const captain = person
captain.number = 99
console.log(person, captain) // { name: 'Wes Bos', age: 80, number: 99 }, { name: 'Wes Bos', age: 80, number: 99 }
// Using Object.assign() method to copy object
const cap2 = Object.assign({}, person, { number: 99, age: 12 })
console.log(cap2) // { name: 'Wes Bos', age: 12, number: 99 }
// Using JSON methods for deep copying objects
const wes = {
name: 'Wes',
age: 100,
social: {
twitter: '@wesbos',
facebook: 'wesbos.developer',
},
}
console.clear()
console.log(wes)
const dev = Object.assign({}, wes)
const dev2 = JSON.parse(JSON.stringify(wes))
Note
- Both
Object.assign()and spread operator create shallow copies, only copying the first level. Nested objects remain references. - Deep copying can be achieved using
JSON.parse(JSON.stringify(obj))or third-party libraries like lodash'scloneDeepmethod, but use with caution.
