一、浅拷贝

  1. <!-- 应用场景:复杂数据类型 -->
  2. <script>
  3. /* 简单的赋值:浅拷贝 */
  4. var arr = [1,2,3,4];
  5. var newArr = arr;
  6. newArr.push(5);
  7. console.log(arr);
  8. </script>

二、深拷贝

2-1.简单数据类型

  1. <!-- 赋值运算的时候只赋值 -->
  2. <!-- 赋值运算中
  3. 浅拷贝:指向的是堆内存中的同一个对象
  4. 深拷贝:指向堆内存中的不同对象
  5. -->
  6. <script>
  7. var arr = [1,2,3,4];
  8. var newArr = [...arr];
  9. arr.push(5);
  10. console.log(newArr);
  11. </script>
  1. <script>
  2. var arr = [2,3,4,5];
  3. var newArr = arr.slice(0,);
  4. newArr.push(6);
  5. console.log(arr);
  6. </script>
  1. <script>
  2. var arr = [2,3,4,5];
  3. var newArr = [].concat(arr);
  4. arr.push(6);
  5. console.log(newArr);
  6. </script>

2-2.复杂数据类型

Untitled-2021-12-23-1445.png

  1. <script>
  2. var arr = [{name:"lisi"},{name:"wangwu"}];
  3. var newArr = JSON.parse(JSON.stringify(arr));
  4. arr[0].name = 'react';
  5. console.log(newArr);
  6. </script>
  1. <script>
  2. var arr = [{ name: "lisi" }, { name: "wangwu" }];
  3. /* array,object,string,boolean,number */
  4. function deepClone(obj) {
  5. if (obj == null || typeof obj !="object") {
  6. return obj
  7. }
  8. let result;
  9. if (obj instanceof Array) {
  10. result = [];
  11. } else {
  12. result = {};
  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);
  22. </script>