深拷贝的两种方法

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>深拷贝的两种方法</title>
</head>

<body>
    <script>
        //JSON.stringify 简单粗暴
        var origin_data = { a: 1, b: 2, c: [1, 2, 3] }
        var copy_data = JSON.parse(JSON.stringify(origin_data))
        origin_data.a = 3;
        origin_data.b = 4;
        origin_data.c[0] = '呵呵哒';
        console.log(origin_data)
        console.log(copy_data)

        // 递归
        function deepClone(source) {
            const targetObj = source.constructor === Array ? [] : {}; // 判断复制的目标是数组还是对象
            for (let keys in source) { // 遍历目标
                if (source[keys] && typeof source[keys] === 'object') { // 如果值是对象或者数组,就递归一下
                    targetObj[keys] = deepClone(source[keys]);
                } else { // 如果不是,就直接赋值
                    targetObj[keys] = source[keys];
                }
            }
            return targetObj;
        }
        var origin_data = { a: 1, b: 2, c: [1, 2, 3] }
        var copy_data = deepClone(origin_data)
        origin_data.a = 3;
        origin_data.b = 4;
        origin_data.c[0] = '呵呵哒';

        console.log(origin_data);
        console.log(copy_data);


    </script>
</body>

</html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容