打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
前端面试题整理——深拷贝
    const obj = {
        a: 100,
        b: {
            b1: [1, 2, 3],
            b2: 'string'
        },
        c: ['a', 'b', 'c']
    }

    /*
    *  没做深拷贝的效果
    const obj2 = obj
    obj2.a = 200
    obj2.b.b2 = 'abc123'
    obj2.c[0] = 'aa'
    console.log(obj)
    console.log(obj2)

    obj2修改的内容会影响obj的内容,因为他们修改的都是同一个堆内容
    * */

    const obj2 = deepClone(obj);
    obj2.a = 200
    obj2.b.b2 = 'abc123'
    obj2.c[0] = 'aa'
    console.log(obj)
    console.log(obj2)

    /**
     * 深拷贝
     * @param {Object} obj 要深拷贝的对象
     * */
    function deepClone(obj = {}) {
        // obj如果不是引用类型,或者是null,直接返回
        if (typeof obj !== 'object' || obj == null) {
            return obj
        }
        // 初始化返回结果
        let result;
        if (obj instanceof Array) {
            result = []
        } else {
            result = {}
        }
        // 遍历obj
        for (let key in obj) {
            // 保证key不是原型的属性
            if (obj.hasOwnProperty(key)) {
                // 递归调用
                result[key] = deepClone(obj[key])
            }
        }
        return result
    }

考点:

不同类型使用内存堆栈的情况

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
前端面试题整理——Javascript基础
前端【JS】,深拷贝与浅拷贝的区别及详解!
对象(数组)的深克隆和浅克隆(头条)
深入了解JavaScript中的浅拷贝和深拷贝
4种JavaScript中不同迭代对象的方法
搞懂90%,就可进大厂的前端面试题(二) | 面经分享
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服