美文网首页
js中的{}与[]的深度克隆

js中的{}与[]的深度克隆

作者: 她与星河皆遗憾 | 来源:发表于2021-09-27 16:20 被阅读0次

    数组与对象直接克隆,克隆类中的数组只是获得了原始类中的数组指向。原始类和克隆类中的数组指向同一个空间,当你需要操作克隆类中的数组时,原始类的数组也会跟着改变。

    deepClone (obj) {
        // 对常见的“非”值,直接返回原来值
        if([null, undefined, NaN, false].includes(obj)) {
            return obj;
        }
        // 原始类型直接返回
        if(typeof obj !== "object" && typeof obj !== 'function') {
            return obj;
        }
        // 判断是数组还是对象
        var o = Object.prototype.toString.call(obj) === '[object Array]' ? [] : {};
        for(let i in obj) {
             // 判断所得的属性是否是自身的属性,不能使用原型链上的属性
            if(obj.hasOwnProperty(i)){
                // 判断是原始值还是对象值,然后循环递归
                o[i] = typeof obj[i] === "object" ? deepClone(obj[i]) : obj[i];
            }
        }
        return o;
    }
    

    相关文章

      网友评论

          本文标题:js中的{}与[]的深度克隆

          本文链接:https://www.haomeiwen.com/subject/metknltx.html