应用场景:复杂数据类型
<!-- 赋值运算中
浅拷贝:指向的是堆内存中的同一个对象
深拷贝:指向堆内存中的不同的对象
-->
1、简单数据类型
浅拷贝
<script>
/* 简单浅拷贝 */
var arr =[1,2,3,4];
var newArr=arr;
newArr.push(5);
console.log(arr); //[1,2,3,4,5]
</script>
深拷贝
var arr=[1,2,3,4];
var newArr=[...arr];
newArr=arr;
console.log(arr); //[1,2,3,4]
var arr=[2,3,4,5]
var newArr=arr.slice(0,)
arr.push(5)
console.log(newArr); // [2, 3, 4, 5]
var arr=[2,3,4,5]
var newArr=[].concat(arr)
arr.push(6)
console.log(newArr);// [2, 3, 4, 5]
2、深拷贝
var arr=[{name:"lisi"},{name:"zhangsan"}]
var newArr=[...arr];
arr[0].name = "react";
console.log(newArr);
1.
var arr= [{name:"tom"},{name:"jack"}];
var newArr=JSON.parse(JSON.stringify(arr));
arr[0].name="react"
console.log(newArr);
2.
var arr= [{name:"tom"},{name:"jack"}];
/* array,object,string,boolean,number */
function deepClone(obj){
/* 如果是初始化值,则直接返回 */
let result;
if(obj instanceof Array){
result =[]
}else if(typeof obj =="object"){
result = {}
}
else{
return obj
}
for(let key in obj ){
result[key]=deepClone(obj[key])
}
return result
}
var newArr=deepClone(arr)
arr[0].name="react"
console.log(newArr);