js对象深拷贝

Posted 坐观南星北斗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js对象深拷贝相关的知识,希望对你有一定的参考价值。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    
</body>

<script>
    function deepCopy(obj){
        //确定入参啥数组还是对象
        var objArray = Array.isArray(obj) ? []:{};
        //obj存在,且类型为对象
        if(obj && typeof obj === ‘object‘){
            //遍历对象属性
            for(key in obj){
                //判断对象属性是否属于自身
                if(obj.hasOwnProperty(key)){
                    //判断obj子属性是否为对象,如果是,递归操作,否 将对象保存
                    if(obj[key] && typeof obj[key] === ‘object‘){
                        objArray[key] = deepCopy(obj[key])
                    }else{
                        objArray[key] = obj[key]
                    }
                }
            }
        }
        return objArray;
    }

    var obj1 = {
        nan:1,
        bei:null,
        dong:undefined,
        xi:{
            xinan:2,
            xibei:function(){
                let b = 2
            }
        },
        fn:function(){
            let a = 1;
        },
        a:[1,2]
    }
    var obj2 = deepCopy(obj1)
    console.log(obj1)
    obj2.xi.xinan = 5;
    console.log(obj2)
</script>
</html>

 

以上是关于js对象深拷贝的主要内容,如果未能解决你的问题,请参考以下文章

js对象深拷贝

JS中如何进行对象的深拷贝

JS深拷贝数组和对象

js的浅拷贝和深拷贝

JS基础 - 手写深拷贝

js 对象的浅拷贝和深拷贝