【无标题】深浅拷贝

发布于:2022-12-25 ⋅ 阅读:(314) ⋅ 点赞:(0)

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

</head>

<body>

    <script>

        // 藕断丝连是浅拷贝 不影响原数组是深拷贝

        // 基本数据类型赋值 深拷贝

        // let a = 1

        // let b= a

        // b=3

        // console.log(a,b);

        // 数组对象的赋值浅拷贝

        // let arr = [1,2,3]

        // let newArr = arr

        // newArr.push(4)

        // console.log(arr,newArr);

       

        // 解构赋值是深是浅  一维数组是深拷贝

        //  let arr2 = [1,2,3]

        //  let newArr2 = [...arr2]

        //  newArr2.push(4)

        //  console.log(arr2,newArr2);

        // 二维数组是浅拷贝

        //  let arr3 = [[1,2,3],[2,1]]

        //  let newArr3 = [...arr3]

        //  newArr3[1].push(5555)

        //  console.log(arr3,newArr3);

     

        // 深拷贝

        // 缺陷 方法不能拷贝 日期对象不能深拷贝

    //  let list = [

    //     {name: '牛',age:15},

    //     {name: '蝴',age:151},

    //     {name: '猪',age:12},

    //     {name: '胡',age:125}

    //  ]

    //  let newList = JSON.parse(JSON.stringify(list))

    //  newList.push({id: 888})

    //  console.log(list,newList);

   let objc = {

    a:121,

    c:{P:12,f:23},

    arr:[1,3,54,76]

   }

    //  标准的深拷贝(递归) =>针对 引用数据类型(数组对象)

    //   []=>Array 基类 {}=>object      

      function deepClone(source) {

        // 用变量装 起来判断它的基类

        const targetObj = source.constructor === Array ? {} : []

       for(let keys in source){

        if (source.hasOwnProperty(keys)) {

            // 判读key的3种情况

            if(source[keys] && typeof source[keys] === 'object'){

                targetObj[keys] = source[keys].constructor === Array ? {} : []

               targetObj[keys] = deepClone(source[keys])

            }else{

                targetObj[keys] = source[keys]

            }

        }

       }

       return targetObj

      }


 

    let asd = deepClone(objc)

    asd.a = '行不相信';

    asd.c.push('三百')

    console.log(asd.c);

    console.log(asd,objc);

    </script>

</body>

</html>


网站公告

今日签到

点亮在社区的每一天
去签到