js中object的copy

本文详细介绍了在JavaScript中如何进行深拷贝和浅拷贝,包括使用ES6的扩展运算符、Array.from()、JSON.parse()与JSON.stringify()以及递归函数等方法。同时对比了不同方法的优缺点,帮助读者理解并选择最适合自己的拷贝方式。

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

一、场景

  在js中一个对象(Object)或者是一个数组(Array)在复制的过程中往往不是特别的简单,一般情况下我们会直接将其赋值给另外一个变量名下,就像这样:

var a = [1,2,3];
var b = a;
b.push(4);
console.log(a); // [1,2,3,4] 

  但是很显然这样的话,只是把原来的数组引用了,实际上两个变量下用的还是同一个数组,所以如果我们想复制出来一个新的数组的话就不能这样,对象也是一样;

二、关于数组(Array)

  对于数组来说要想复制一个新的出来,其实es6已经给出了几个方法:

//三个点
let a =  [1,2,3,4,5];
let b = [...a];
a.push(666);
console.log(a); //[1,2,3,4,5,666]
console.log(b);// [1,2,3,4,5]

//Array.from()
let a =  [1,2,3,4,5];
let b = Array.from(a);
a.push(666);
console.log(a); //[1,2,3,4,5,666]
console.log(b);// [1,2,3,4,5]

  如果是es5的话也有js的实现方法,最笨的方法就是遍历这个数组来复制,这里不再赘述,另外有一个小技巧还不错:

var a=[1,2,3,4,5];
var b=a;
var c=[].concat(a);
a.push(666);
console.log(a);
console.log(b);

二、关于对象(Object)

  我认为对于对象来说最简单的深拷贝方法就是转成字符串再解析:

var obj = {a:1,b:2}
var newObj = JSON.parse(JSON.stringify(obj));
newObj.a=3;
console.log(obj);

es6也有一种简单的方法可以copy对象(Object.assign),不过貌似还是浅copy。

  另外一种深拷贝方法:递归遍历

var obj = {a:{b:10}};
function deepCopy(obj){
  if ( typeof obj != 'object' ){ // ( obj  instanceof Object || obj  instanceof Array )
    return obj;
  }
  var newobj = {};
  for ( var attr in obj) {
    newobj[attr] = deepCopy(obj[attr]);
  }
  return newobj;
}
var obj2 = deepCopy(obj);
obj2.a.b = 20;
alert(obj.a.b); //10

  

 

转载于:https://www.cnblogs.com/mingweiyard/p/10025348.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值