其他分享
首页 > 其他分享> > 没有js金刚钻 怎么,一步一步,一步斩获大厂offer

没有js金刚钻 怎么,一步一步,一步斩获大厂offer

作者:互联网

手写递归深拷贝,必会的

<script>
    // 定义一个嵌套深的对象,深拷贝
    let obj = {
            name: '张三',
            list: [1, 2, 3]
        }
        //判断是否是基本数据类型,如果是直接return,因为复杂数据类型才会深拷贝
    function deepClone(obj) {
        //判断是否是基本数据类型,nul也是基本数据类型
        if (typeof obj !== 'object' || obj == null) {
            return obj
        }
        //初始化判断是数组还是对象 初始化返回结果
        let result
        if (obj instanceof Array) {
            result = []
        } else {
            result = {}
        }
        //for in 循环,数组和对象有原型,空的也有,没必要去拿obj原型上的方法或属性
        for (let key in obj) {
            //排除原型上的方法或属性 hasOwnProperty判断是否是自己私有属性
            if (obj.hasOwnProperty(key)) {
                result[key] = deepClone(obj[key]) //递归调用
            }
        }
        return result
    }
    console.log(obj); //{name: '张三', list: Array(3)}
    let newObj = deepClone(obj)
    console.log(newObj); //{name: '张三', list: Array(3)}
    // 检测一下深拷贝是否成
    newObj.name = '李四'
    console.log(newObj); //{name: '李四', list: Array(3)}  ok 关机下班
</script>

 

 

标签:obj,name,offer,一步,数据类型,js,let,result,newObj
来源: https://blog.csdn.net/m0_57904695/article/details/122598430