单手一个八拍,带你实现深拷贝 ~skr skr

  • 浅克隆的弊端, 拷贝的是基本类型, 当遇到引用类型时,拷贝的是该值的引用,

  • JSON.stringify() JSON.parse() 可以实现深拷贝 ,但有两个缺点:

    1. 如果对象里面有函数, 函数就无法被拷贝出来
    2. 无法拷贝目标对象原型链上的属性和方法
    
  • 深拷贝 在遇到引用类型时 不是复制它的索引,而是重新开辟一个空间 用来保存它的值 , 这样就不会影响源数据了

1. 检测数据类型
function checkType(value) {
return Object.prototype.toString.call(value).slice(8, -1);
}

2.实现深拷贝
function deepCopy(args) {
    let result;
    if (checkType(args) !== ("Object" || 'Array')) {
        result = args
    } else {
        checkType(args) === "Object" && (result = {});
        checkType(args) === "Array" && (result = []);
        for (let i in args) {
            result[i] = deepCopy(args[i]);
        }
    }
    return result
}

你可能感兴趣的:(单手一个八拍,带你实现深拷贝 ~skr skr)