JavaScript中深拷贝的实现方式详解

在JavaScript中,对象的拷贝可以分为浅拷贝和深拷贝。

当我们复制一个对象的时候,往往需要了解的就是浅拷贝和深拷贝的区别及实现方式。

以下是对JavaScript中深拷贝的详细讲解。

图片[1]-JavaScript中深拷贝的实现方式详解-不念博客

深拷贝与浅拷贝的区别

浅拷贝是创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。

如果属性是基本类型,拷贝的就是基本类型的值,如果属性是内存地址(也就是引用类型),拷贝的就是内存地址 ,因此如果其中一个对象改变了这个地址,就会影响到另一个对象。

深拷贝会创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。

实现深拷贝的方法

1. 使用JSON对象的parse和stringify

这是最简单的一种实现深拷贝的方法,但是这种方法有局限性:

  • 会忽略 undefined
  • 不能序列化函数
  • 不能解析循环引用的对象
let obj = {a:1, b:2, c:{d:3}}
let newObj = JSON.parse(JSON.stringify(obj));

2. 递归实现深拷贝

可以通过递归的方式,判断对象的每个属性,如果属性为对象,再递归拷贝该对象,直到拷贝所有的基本类型为止。

function deepClone(obj) {
    if (typeof obj !== 'object' || obj === null) {
        return obj;
    }
    let cloneObj = Array.isArray(obj) ? [] : {};
    for (let i in obj) {
        cloneObj[i] = deepClone(obj[i]);
    }
    return cloneObj;
}

3. 使用第三方库实现深拷贝

例如lodash库的_.cloneDeep方法,可以非常方便的实现深拷贝。

let _ = require('lodash');
let obj = {a:1, b:2, c:{d:3}}
let newObj = _.cloneDeep(obj);

以上是JavaScript中深拷贝的实现方式,这种技巧在实际的开发中非常实用,希望对你有所帮助。

© 版权声明
THE END
喜欢就支持一下吧
点赞53赞赏 分享
评论 抢沙发
头像
欢迎光临不念博客,留下您的想法和建议,祝您有愉快的一天~
提交
头像

昵称

取消
昵称代码图片

    暂无评论内容