浅拷贝与深拷贝。

浅拷贝与深拷贝的概念

浅拷贝和深拷贝是编程中常见的两种数据复制方式,主要用于处理对象或复杂数据结构的复制问题。浅拷贝仅复制对象的顶层结构,而深拷贝会递归复制对象的所有层级结构。两者的选择取决于具体需求,尤其在涉及嵌套对象或引用类型数据时,深拷贝能避免潜在的副作用。

浅拷贝的实现方式

浅拷贝仅复制对象的顶层属性,如果属性是引用类型(如数组、对象),则复制的是引用而非实际值。这意味着修改拷贝后的引用类型数据会影响原始对象。

使用展开运算符实现浅拷贝
const original = { a: 1, b: { c: 2 } };
const shallowCopy = { ...original };

shallowCopy.b.c = 3;
console.log(original.b.c); // 输出 3,原始对象被修改
使用 Object.assign 实现浅拷贝
const original = { a: 1, b: { c: 2 } };
const shallowCopy = Object.assign({}, original);

shallowCopy.b.c = 3;
console.log(original.b.c); // 输出 3,原始对象被修改

深拷贝的实现方式

深拷贝会递归复制对象的所有层级,确保拷贝后的对象与原始对象完全独立,修改拷贝对象不会影响原始对象。

使用 JSON.parseJSON.stringify 实现深拷贝
const original = { a: 1, b: { c: 2 } };
const deepCopy = JSON.parse(JSON.stringify(original));

deepCopy.b.c = 3;
console.log(original.b.c); // 输出 2,原始对象未被修改

注意:此方法无法处理函数、undefined 或循环引用的情况。

递归实现深拷贝
function deepClone(obj) {
    if (obj === null || typeof obj !== 'object') {
        return obj;
    }
    const clone = Array.isArray(obj) ? [] : {};
    for (const key in obj) {
        if
### 浅拷贝与深拷贝的概念

浅拷贝和深拷贝是编程中常见的两种数据复制方式,主要用于处理对象或复杂数据结构的复制问题。浅拷贝仅复制对象的顶层结构,而深拷贝会递归复制对象的所有层级结构。两者的选择取决于具体需求,尤其在涉及嵌套对象或引用类型数据时,深拷贝能避免潜在的副作用。

### 浅拷贝的实现方式

浅拷贝仅复制对象的顶层属性,如果属性是引用类型(如数组、对象),则复制的是引用而非实际值。这意味着修改拷贝后的引用类型数据会影响原始对象。

#### 使用展开运算符实现浅拷贝

```javascript
const original = { a: 1, b: { c: 2 } };
const shallowCopy = { ...original };

shallowCopy.b.c = 3;
console.log(original.b.c); // 输出 3,原始对象被修改
使用 Object.assign 实现浅拷贝
const original = { a: 1, b: { c: 2 } };
const shallowCopy = Object.assign({}, original);

shallowCopy.b.c = 3;
console.log(original.b.c); // 输出 3,原始对象被修改

深拷贝的实现方式

深拷贝会递归复制对象的所有层级,确保拷贝后的对象与原始对象完全独立,修改拷贝对象不会影响原始对象。

使用 JSON.parseJSON.stringify 实现深拷贝
const original = { a: 1, b: { c: 2 } };
const deepCopy = JSON.parse(JSON.stringify(original));

deepCopy.b.c = 3;
console.log(original.b.c); // 输出 2,原始对象未被修改

注意:此方法无法处理函数、undefined 或循环引用的情况。

递归实现深拷贝
function deepClone(obj) {
    if (obj === null || typeof obj !== 'object') {
        return obj;
    }
    const clone = Array.isArray(obj) ? [] : {};
    for (const key in obj) {
        if
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值