练习题4_深拷贝.html 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <script>
  10. // 深拷贝 递归拷贝
  11. function deepClone(val) {
  12. // 如果传递过来的是一个基本数据类型 直接返回
  13. if (typeof val != "object" || val === null) {
  14. return val;
  15. } else {
  16. if (Array.isArray(val)) {
  17. let newArr = [];
  18. for (let i = 0; i < val.length; i++) {
  19. newArr[i] = deepClone(val[i]);
  20. }
  21. return newArr;
  22. } else {
  23. let newObj = {};
  24. for (let key in val) {
  25. newObj[key] = deepClone(val[key]);
  26. }
  27. return newObj;
  28. }
  29. }
  30. }
  31. let arr = [1, 2, ["a", "b"], 3, 4];
  32. let obj = {
  33. a: 1,
  34. b: 2,
  35. c: {
  36. x: 100,
  37. y: 200
  38. }
  39. }
  40. let obj2 = deepClone(obj);
  41. obj.c.x = 300;
  42. console.log(obj2);
  43. // let arr2 = deepClone(arr);
  44. // arr[0] = 100;
  45. // arr[2][0] = "hello";
  46. // console.log(arr2);
  47. </script>
  48. </body>
  49. </html>