浅拷贝&深拷贝(如何实现深拷贝)

js的数据类型

主要分两大类:基本数据类型和引用数据类型。

基本数据类型有:

Srting/Number/Null/undefine/Boolean  占用内存大小确定,保存在栈内。

引用数据类型:

Object/Array  占用内存大小不确定,保存在堆内。

深拷贝的方法

1. JSON.parse(JSON.stringify(obj))

比较日常又比较dirty的方法,适合json可以解读的数据

2.利用lodash里的_.cloneDeep

import  "_" from lodash;

let obj = {name:'zs',age:12};

let obj2 = _.cloneDeep(obj);

obj2.name = 'ls'

console.log(obj,ojb1)

//{name:'zs',age:12},{name:'ls',age:12}

3.jQuery —— $.clone() / $.extend()

4.实现一个深拷贝的方法

function deepCopy (obj) {

 var result;

 //引用类型分数组和对象分别递归

 if (Object.prototype.toString.call(obj) == '[object Array]') {

 result = []

 for (i = 0; i < obj.length; i++) {

 result[i] = deepCopy(obj[i])

 }

 } else if (Object.prototype.toString.call(obj) == '[object Object]') {

 result = {}

 for (var attr in obj) {

 result[attr] = deepCopy(obj[attr])

 }

 }

 //值类型直接返回

 else {

 return obj

 }

 return result

}

你可能感兴趣的:(浅拷贝&深拷贝(如何实现深拷贝))