javascript 深浅拷贝例子

100 阅读1分钟

深浅拷贝区别

浅拷贝:如果包含内嵌的对象或者数组不在复制副本

深拷贝:如果包含内嵌的对象或者数组也会复制副本

1.浅拷贝

    <script>
        var obj = {
            name: "磨乐",
            arr: ["飞棒,阿班"],
            address: {
                prov: "江西省",
                city: "江西",
                area: "成都"
            },
            age: "30",
            score: null
        };
        //封装拷贝函数
        function clone(obj) {
        //声明一个空对象
            var newobj = {} 
        //循环遍历传进来的对象
            for (var key in obj) { 
        //声明的空对象强行赋值
            newobj[key] = obj[key]
            }
            return newobj
        };

        var obj1 = clone(obj)
        console.log(obj1);
    </script>

2.深拷贝

<body>
    <script>
        var obj = {
            name: "磨乐",
            arr: ["飞棒,阿班"],
            address: {
                prov: "江西省",
                city: "江西",
                area: "成都"
            },
            age: "30",
            score: null
        };

        function clone(obj) {
            if (obj === null) {
                return null
            }
            else
            if (obj instanceof Array) {
                var newArr = [];
                newArr = obj.slice();
                return newArr;
            }
            var newobj = {}
            for (var key in obj) {
                if (typeof obj[key] !== 'object') {
                    newobj[key] = obj[key]
                } else {
                    newobj[key] = clone(obj[key])
                }
            }
            return newobj
        };

        var obj1 = clone(obj)
        console.log(obj1);
    </script>
</body>