- 深拷貝和淺考都是對複雜對象的操作
var obj = {
name: "zhangsan"
age: ["26","30"]
person:{
man:"26",
}
}
深拷貝
- 另外在堆記憶體中占用一塊單獨堆記憶體存放資料,内容和原來的對象一樣,更改原來的對象,深拷貝的對象不會改變。
- 實作深拷貝用得比較多的方法是 JSON.parse(JSON.stringify())
var obj = {
nama: 'zhangsan',
age: ['25', '26'],
}
const obj1 = JSON.parse(JSON.stringify(obj))
obj1.nama = 'zhaosi'
obj1.age[1] = '30'
console.log(obj, obj1)
{nama: “zhangsan”, age: Array(2)}age: Array(2)0: "25"1: “26”
{nama: “zhaosi”, age: Array(2)}age: (2) [“25”, “30”]nama: “zhaosi”
淺拷貝
- 隻拷貝對象的引用,(對象的”引用值“也可以是屬性為引用類型)當原對象引用發生改變,拷貝的對象也發生變化。
var shallowCopy = (obj) => {
const result = {}
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
result[key] = obj[key]
}
}
return result
}
const start = {
name: 'zhangsan',
age: 25,
friend: {
name: 'lisi',
},
}
const foo = shallowCopy(start)
foo.friend.name = 'zhaosi'
console.log(start)
{name: “zhangsan”, age: 25, friend: {…}}
age: 25
friend:
name: “zhaosi”
proto: Object
name: “zhangsan”