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

2021-09-27  本文已影响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;
}
上一篇下一篇

猜你喜欢

热点阅读