数据深浅拷贝
前言: js中数据分为基本类型和引用类型,基本类型变量在使用时可以被直接访问,不存在深浅拷贝一说;而引用类型,由于其值变量存放在堆中,栈中存放的是指向堆中值的地址,所有在使用引用类型变量时,使用的是栈中的引用地址。
深浅拷贝:简单来说就是把object类型的数据复制后进行修改,修改后的值对原值没有影响为深拷贝;反之,改变了原值就是浅拷贝。
由于object数据在复制后操作会影响到原值,在某些情况下并不是我们想要的,想要解决这个问题就要用到数据的深拷贝,对于数据深拷贝,本人比较喜欢如下两种,尤其是第一种在使用起来非常简单暴力:
- 把object转成json字符串,在将json串反转成object对象
let obj = {
name: '美眉',
gender: '女',
age: '18',
tag: ['美少女','小可爱','白富美']
}
let obj1 ;
let strObj = JSON.stringify(obj);
obj1 = JSON.parse(strObj);
//obj1 = SON.parse(JSON.stringify(object));
花里胡哨的深拷贝JSON.parse(JSON.stringify(object)) 一句代码搞定 0.0 。
- 创建新的对象,递归循环直到其为基本类型然后复制过去
deepCopy: (data) => {
let copyObj = data instanceof Array ? [] : {}
for(item in data){
if(typeof(item) === 'object'){
obj[item] = deepCopy(data[item])
}else{
obj[item] = data[item]
}
}
return copyObj
}