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

2023年 7月 30日 60.7k 0

在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中深拷贝的实现方式,这种技巧在实际的开发中非常实用,希望对你有所帮助。

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论