应用场景:复杂数据类型

  1. <!-- 赋值运算中
  2. 浅拷贝:指向的是堆内存中的同一个对象
  3. 深拷贝:指向堆内存中的不同的对象
  4. -->

image.png

1、简单数据类型

浅拷贝

  1. <script>
  2. /* 简单浅拷贝 */
  3. var arr =[1,2,3,4];
  4. var newArr=arr;
  5. newArr.push(5);
  6. console.log(arr); //[1,2,3,4,5]
  7. </script>

深拷贝

  1. var arr=[1,2,3,4];
  2. var newArr=[...arr];
  3. newArr=arr;
  4. console.log(arr); //[1,2,3,4]
  5. var arr=[2,3,4,5]
  6. var newArr=arr.slice(0,)
  7. arr.push(5)
  8. console.log(newArr); // [2, 3, 4, 5]
  9. var arr=[2,3,4,5]
  10. var newArr=[].concat(arr)
  11. arr.push(6)
  12. console.log(newArr);// [2, 3, 4, 5]

2、深拷贝

  1. var arr=[{name:"lisi"},{name:"zhangsan"}]
  2. var newArr=[...arr];
  3. arr[0].name = "react";
  4. console.log(newArr);

1.

  1. var arr= [{name:"tom"},{name:"jack"}];
  2. var newArr=JSON.parse(JSON.stringify(arr));
  3. arr[0].name="react"
  4. console.log(newArr);

2.

  1. var arr= [{name:"tom"},{name:"jack"}];
  2. /* array,object,string,boolean,number */
  3. function deepClone(obj){
  4. /* 如果是初始化值,则直接返回 */
  5. let result;
  6. if(obj instanceof Array){
  7. result =[]
  8. }else if(typeof obj =="object"){
  9. result = {}
  10. }
  11. else{
  12. return obj
  13. }
  14. for(let key in obj ){
  15. result[key]=deepClone(obj[key])
  16. }
  17. return result
  18. }
  19. var newArr=deepClone(arr)
  20. arr[0].name="react"
  21. console.log(newArr);