JS基础 - 手写深拷贝

Posted xintangchn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS基础 - 手写深拷贝相关的知识,希望对你有一定的参考价值。

思路:深拷贝一个对象(数组),就是要深拷贝对象(数组)中的每一个元素,很显然应当用递归实现。

  • 递归退出条件:当传入的变量是基本类型,或为null时,直接返回变量本身。
  • 递推工作:深拷贝每一个属性,注意用hasOwnProperty保证只拷贝自身的属性,不拷贝继承到的属性。

代码:

function deepClone(obj){
    //不是引用类型或为null时退出递归
    if(typeof obj !== "object" || obj == null){
        return obj;
    }

    //初始化新变量
    let copy;
    if(obj instanceof Array){
        copy = [];
    }else{
        copy = {};
    }

    //深拷贝每一个元素
    for(let key in obj){
        if(obj.hasOwnProperty(key)){
            copy[key] = deepClone(obj[key]);
        }
    }

    return copy;
}

 

以上是关于JS基础 - 手写深拷贝的主要内容,如果未能解决你的问题,请参考以下文章

js手写深拷贝的实现

js手写深拷贝的实现

手写JS深拷贝-考虑各种数据类型和循环引用

JS

js 深拷贝

2021年的几次面试让我死磕了17道JS手写题!