深拷贝

作者: 明天_8c66 | 来源:发表于2021-03-30 19:08 被阅读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>deepCopy</title>

      </head>

      <body>

        <script>

          var obj = {

            id: 1,

            name: "贺贺呀",

            msg: {

              age: 18,

              other: {

                time: 01,

              },

            },

          };

          var o = {};

          // 浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用(地址)

          //   封装函数  利用了递归的思想

          function deepCopy(newObj, oldObj) {

            for (var k in oldObj) {

              // 判断我们的属性值属于哪种数据类型

              //   1. 获取属性值 oldObj[k]

              // var item = oldObj[k];

          // 这里要先判断数组再判断对象,因为数组也是对象,如果先判断对象就会把数组的判断覆盖了

              if (oldObj[k] instanceof Array) {

                //  2. 判断这个值是否是数组

                newObj[k] = [];

                deepCopy(newObj[k], oldObj[k]);

              } else if (oldObj[k] instanceof Object) {

                //  3. 判断这个值是否是对象

                newObj[k] = {};

                deepCopy(newObj[k], oldObj[k]);

              } else {

                //  4. 属于简单数据类型

                newObj[k] = oldObj[k];

              }

            }

          }

          deepCopy(o, obj);

          console.log(o);

          o.msg.other.time = 22;

          console.log(obj);

        </script>

      </body>

    </html>

    相关文章

      网友评论

          本文标题:深拷贝

          本文链接:https://www.haomeiwen.com/subject/berbhltx.html