Skip to content

Instantly share code, notes, and snippets.

@erukiti
Created December 11, 2017 08:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save erukiti/6068934c4f0f4265b371385197a904d0 to your computer and use it in GitHub Desktop.
Save erukiti/6068934c4f0f4265b371385197a904d0 to your computer and use it in GitHub Desktop.
clone問題
const old = {
hoge: 0,
fuga: {
piyo: 0
}
}
const new1 = old
new1.hoge = 1
new1.fuga.piyo = 1
console.log(old === new1, old.hoge) // --> true, 1
console.log(old.fuga === new1.fuga, old.fuga.piyo) // --> true, 1
const new2 = [old][0]
new2.hoge = 2
new2.fuga.piyo = 2
console.log(old === new2, old.hoge) // --> true, 2
console.log(old.fuga === new2.fuga, old.fuga.piyo) // --> true, 2
const new3 = [old].slice()[0]
new3.hoge = 3
new3.fuga.piyo = 3
console.log(old === new3, old.hoge) // --> true, 3
console.log(old.fuga === new3.fuga, old.fuga.piyo) // --> true, 3
const new4 = { ...old }
new4.hoge = 4
new4.fuga.piyo = 4
console.log(old === new4, old.hoge) // --> false, 3
console.log(old.fuga === new4.fuga, old.fuga.piyo) // --> true, 4
const new5 = Object.assign({}, old)
new5.hoge = 5
new5.fuga.piyo = 5
console.log(old === new5, old.hoge) // --> false, 3
console.log(old.fuga === new5.fuga, old.fuga.piyo) // --> true, 5
const new6 = JSON.parse(JSON.stringify(old))
new6.hoge = 5
new6.fuga.piyo = 5
console.log(old === new6, old.hoge) // --> false, 3
console.log(old.fuga === new6.fuga, old.fuga.piyo) // --> false, 5
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment