js 深拷贝方法

1.JSON方法

JSON.parse(JSON.stringify(data))
缺点:

  • 无法处理循环引用:当对象中存在循环引用时,即对象的某个属性指向该对象本身,JSON.stringify()会抛出异常。
  • 无法拷贝非枚举属性和方法:JSON.stringify()只能拷贝对象自身的可枚举属性,并且会忽略函数和Symbol类型的属性。
  • 无法拷贝特殊的对象属性:JSON.stringify()不会拷贝对象的原型链上的属性。
  • 无法处理日期对象:将日期对象转换为JSON字符串后再使用JSON.parse()解析时,日期对象会变成字符串,而不是重新生成日期对象。
  • 无法处理正则表达式对象:正则表达式对象在转换为JSON字符串后会变成空对象。
  • 无法处理undefined和function:JSON.stringify()会将undefined和函数直接转换为null
  • 无法处理Infinity和NaN:JSON.stringify()会将Infinity和NaN转换为null。

2.ES6 的扩展运算符(…)

缺点:
一层为深拷贝,多层为浅拷贝。
一层为深拷贝:

const data= { 
    a: 'hello',
    b: 21
}
 
const cloneObj = {...data};
 
cloneObj.a = 'hi';
cloneObj.b = 25;
 
cloneObj;
// {
//     a: "hi", 
//     b: 25
// }
 
 
data;
// {
//     a: "hello", 
//     b: 21
// }

多层为浅拷贝:

```javascript
const data= { 
    a: 'hello',
    b: 21,
    info:{
    name: 'data'
    }
}
 
const cloneObj = {...data};

cloneObj.a = 'hi';
cloneObj.b = 25;
cloneObj.info.name= 'clone';
 
cloneObj;
// {
//     a: "hi", 
//     b: 25,
//     info:{
// 		    name: 'clone'
// 	  }
// }
 
 
data;
// {
//     a: "hello", 
//     b: 21,
//     info:{
// 		    name: 'clone'
// 	  }
// }

3…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萝呗 .

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值