js对象深拷贝方法

JSON.stringify()是目前前端开发过程中最常用的深拷贝方式,

原理是把有个对象序列化成为一个 JSON 字符串,将对象的内容转换成字符串的形式再保存到磁盘上,

再用 JSON.parse()反序列化将 JSON 字符串变成一个新的对象

 1 let obj1 = {
 2   a: 1,
 3   b: [1, 2, 3],
 4 };
 5 
 6 let str = JSON.stringify(obj1);
 7 let obj2 = JSON.parse(str);
 8 console.log(obj2); //{ a: 1, b: [ 1, 2, 3 ] }
 9 
10 //修改obj1
11 obj1.a = 2;
12 obj1.b.push(4);
13 console.log(obj1); //{ a: 2, b: [ 1, 2, 3, 4 ] }
14 console.log(obj2); //{ a: 1, b: [ 1, 2, 3 ] }

通过 JSON.stringify 实现深拷贝有几点要注意

  1. 拷贝的对象的值中如果有函数,undefined,symbol 则经过 JSON.stringify()序列化后的 JSON 字符串中这个键值对会消失
  2. 无法拷贝不可枚举的属性,无法拷贝对象的原型链
  3. 拷贝 Date 引用类型会变成字符串
  4. 拷贝 RegExp 引用类型会变成空对象
  5. 对象中含有 NaN、Infinity 和-Infinity,则序列化的结果会变成 null
  6. 无法拷贝对象的循环应用(即 obj[key] = obj)

 

 

 

 

 

 

 

学习记录

posted @ 2020-09-03 17:08  海上蝴蝶  阅读(946)  评论(0编辑  收藏  举报