面试问题:说说深拷⻉和浅拷⻉

深拷贝和浅拷贝是复制对象时需要考虑的两个概念。它们描述了如何复制对象及其属性的引用或值。

  1. 浅拷贝(Shallow Copy):
    浅拷贝是创建一个新对象,然后复制原始对象的非引用类型的属性到新对象中。如果原始对象的属性值是引用类型(如对象、数组等),则浅拷贝会复制属性的引用,而不是属性值本身。因此,原始对象和新对象将共享引用类型的属性。

    私信【学习】即可获取更多前端资料!!!

下面是一个使用浅拷贝的示例代码:

const original = {
  name: 'John',
  age: 30,
  hobbies: ['reading', 'coding']
};

const shallowCopy = Object.assign({}, original);
shallowCopy.name = 'Jane';
shallowCopy.hobbies[0] = 'painting';

console.log(original); // 输出:{ name: 'John', age: 30, hobbies: ['painting', 'coding'] }
console.log(shallowCopy); // 输出:{ name: 'Jane', age: 30, hobbies: ['painting', 'coding'] }

在上面的例子中,Object.assign()方法用于创建原始对象的浅拷贝。修改浅拷贝的name属性不会影响原始对象,但修改hobbies数组会影响原始对象,因为它们共享同一个引用。

  1. 深拷贝(Deep Copy):
    深拷贝是创建一个新对象,并递归地复制原始对象的所有属性值。对于引用类型的属性,深拷贝会创建它们的副本,确保原始对象和新对象完全独立。

下面是一个使用深拷贝的示例代码:

const original = {
  name: 'John',
  age: 30,
  hobbies: ['reading', 'coding']
};

const deepCopy = JSON.parse(JSON.stringify(original));
deepCopy.name = 'Jane';
deepCopy.hobbies[0] = 'painting';

console.log(original); // 输出:{ name: 'John', age: 30, hobbies: ['reading', 'coding'] }
console.log(deepCopy); // 输出:{ name: 'Jane', age: 30, hobbies: ['painting', 'coding'] }

在上面的例子中,JSON.parse()JSON.stringify()方法用于创建原始对象的深拷贝。修改深拷贝的任何属性都不会影响原始对象,因为它们是完全独立的。

私信【学习】即可获取更多前端资料!!!

需要注意的是,深拷贝和浅拷贝的选择取决于具体的需求和场景。在某些情况下,浅拷贝可能足够使用,而在其他情况下,可能需要深拷贝来避免意外的副作用。
在这里插入图片描述

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值