JS基础深拷贝与浅拷贝

博客围绕JS的深拷贝与浅拷贝展开,虽未提供具体内容,但可知聚焦于JavaScript中这两个重要概念,它们在数据处理、对象操作等方面有重要作用,是前端开发需掌握的基础知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<script>
  // 不拷贝的情况,只是赋值,改变obj2 obj1 也会跟着变化,这两个对象指向同一个地址
  var obj1 = {name:'圆', radius:10, point:{x:0,y:0}};
  var obj2 = obj1;
  obj2.aa = 'fang';
  console.log(obj1); // obj1也会增加aa

  // 浅拷贝一下
  var o1 = {name:'圆', radius:10, point:{x:0,y:0}};
  var o2 = Object.assign({}, o1);
  o2.name = 'assign';
  o2.aa = 'assign';
  console.log(o1.name);// o1的值还是圆,不会随着o2的赋值改变
  console.log(o1); // 即使增加值,也不会改变o1
  // 但是改变o2的point的 x,o1的值也会跟着变,因为只是拷贝了一层,第二层的引用指向的还是同一个地址
  o2.point.x = 'assignX';
  console.log(o1);

  // 解构赋值也是一样的,属于浅拷贝
  var a = {name:'圆', radius:10, point:{x:0,y:0}};
  var b = {...a};
  b.point.x = 'aaa';
  console.log(b);//{name:'圆', radius:10, point:{x:aaa,y:0}};
  console.log(a.point.x); // aaa

  // 深拷贝写法
  var deep = {name:'圆', radius:10, point:{x:0,y:0}, getList: function() {console.log('deep')}};
  var deep1 = JSON.parse(JSON.stringify(deep));
  deep1.point.x  = 'deep1';
   deep1.getList();//报错拿不到,因为这种拷贝方法不能拷贝函数
  deep1.getList = function() {console.log('deep1')};
  // console.log(deep.point.x); // 还是0,不会受到deep1的影响。达到了深拷贝,这种写法只适合json的数据格式
  deep1.getList();//deep1
  deep.getList();//deep
// 拷贝正则格式
  var r1 = /\d+/;
  console.log(JSON.stringify(r1));  // {}
  RegExp.prototype.toJSON = function() {
    return this.toString();
  }
  console.log(JSON.stringify(r1));// "/\\d+/"

  //  拷贝时间date 类型的

  var dateStr = new Date();
  console.log(dateStr.getFullYear());
  Date.prototype.toJSON = function() {
    return this.toLocaleString();
  }
  var dateStr1 = JSON.stringify(dateStr);
  console.log(dateStr1)
</script>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值