js深拷贝,包含特殊类型拷贝

js深拷贝,包含特殊类型拷贝

function deepCopy(obj, map = new WeakMap()) {
    if (typeof obj === 'object' && obj !== null) {
        if (map.has(obj)) {
            return map.get(obj);
        }
        map.set(obj, obj);
        let res = Array.isArray(obj) ? [] : {};
        for (let key in obj) {
            if (obj.hasOwnProperty(key)) {
                value = obj[key];
                res[key] = deepCopy(value, map);
            }

        }
        if (!Array.isArray(res) && !Object.keys(res).length) {
            res = new obj.constructor(obj);
        }
        return res;
    }
    else {
        return obj
    }
}
// 测试数据
var test = { name: "test", d: {age: 12} };
test.x = test;
var data = {
    a: "123",
    b: 123,
    c: true,
    d: [43, 2],
    e: undefined,
    f: null,
    g: function () { console.log("g"); },
    h: new Set([3, 2, null]),
    i: Symbol("fsd"),
    j: test,
    k: new Map([["name", "张三"], ["title", "Author"]])
};
deepCopy(data);


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容