码迷,mamicode.com
首页 > Web开发 > 详细

JS基础 - 手写深拷贝

时间:2020-06-27 09:55:14      阅读:57      评论:0      收藏:0      [点我收藏+]

标签:元素   一个   基本类型   数组   cti   return   for   eof   nbsp   

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

  • 递归退出条件:当传入的变量是基本类型,或为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基础 - 手写深拷贝

标签:元素   一个   基本类型   数组   cti   return   for   eof   nbsp   

原文地址:https://www.cnblogs.com/xintangchn/p/13197197.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!