记录几种粗浅的深拷贝方式

237 阅读1分钟

心血来潮,记录几种对象深拷贝的方式,方法粗浅,但有用就行。
个人认为,深拷贝就是通过一个变量,一番嚯嚯哈哈的操作之后,得到一个一模一样,并且相互不干扰的新变量。
由以上思路,有这么几种简单快捷的方法。

// 先随便写一个初始对象
let obj0 = {
    name: 'zhangsan',
    age: 18,
    num: undefined,
    some: null,
    arr: [1, 2, 3],
    _obj: {
        a: 1,
        b: '2'
    }
}
console.log('0', obj0)

// 先看看浅拷贝,就是改变了指针,但是栈区没变,改变obj1的值,obj0的值也会被修改。
let obj1 = obj0
console.log('1', obj1)
console.log(obj1 === obj0) // true

// 深拷贝
// 方法1:JSON数据
let obj2 = JSON.parse(JSON.stringify(obj0))
console.log('2', obj2)
console.log(obj2 === obj0) // false

// 方法2:遍历新生成一个新对象
let obj3 = {}
for (const key in obj0) {
    obj3[key] = obj0[key]
}
console.log('3', obj3)
console.log(obj3 === obj0) // false

// 方法3:Object.assign
let obj4 = Object.assign({}, obj0)
console.log('4', obj4)
console.log(obj4 === obj0) // false

深拷贝并不是复杂的概念,所以我们既然能一行代码甚至一个方法解决深浅拷贝的问题,就不用再多写一个标点符号啦^_^!