搜索
写经验 领红包
 > 知识

深浅克隆的方法有几种(什么是深克隆和浅克隆)

导语:深浅克隆的方法?

深浅克隆的方法有几种(什么是深克隆和浅克隆)

浅克隆:只复制对象的引用,而不是对象本身。当对象的属性值发生改变时,克隆出来的对象也会发生改变。

深克隆:复制对象本身,而不是对象的引用。当对象的属性值发生改变时,克隆出来的对象不会发生改变。可以使用JSON.parse(JSON.stringify(obj))或递归实现深克隆。

1:浅克隆

// 浅克隆let obj1 = {a: 1, b: {c: 2}};let obj2 = Object.assign({}, obj1);console.log(obj2); // {a: 1, b: {c: 2}}obj1.b.c = 3;console.log(obj2); // {a: 1, b: {c: 3}}

2:深克隆 使用JSON.parse(JSON.stringify(obj))

// 深克隆// 方法一:使用JSON.parse(JSON.stringify(obj))let obj3 = {a: 1, b: {c: 2}};let obj4 = JSON.parse(JSON.stringify(obj3));console.log(obj4); // {a: 1, b: {c: 2}}obj3.b.c = 3;console.log(obj4); // {a: 1, b: {c: 2}}

3:递归实现深克隆

// 方法二:递归实现深克隆function deepClone(obj) {  if (typeof obj !== &39; || obj === null) {    return obj;  }  let result = Array.isArray(obj) ? [] : {};  for (let key in obj) {    if (obj.hasOwnProperty(key)) {      result[key] = deepClone(obj[key]);    }  }  return result;}let obj5 = {a: 1, b: {c: 2}};let obj6 = deepClone(obj5);console.log(obj6); // {a: 1, b: {c: 2}}obj5.b.c = 3;console.log(obj6); // {a: 1, b: {c: 2}}

本文内容由小媛整理编辑!