应用场景:复杂数据类型
<!-- 赋值运算中浅拷贝:指向的是堆内存中的同一个对象深拷贝:指向堆内存中的不同的对象-->
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);
