手写深拷贝

Posted fengshaopu

tags:

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

一、先认识什么是相等或者不等
先来搞清楚概念
浅拷贝:
在这里插入图片描述
深拷贝:
在这里插入图片描述

定义是:我们要二个变量、初始值相等的话,就要通深拷贝

  var arr=[1,6,5,[8,9]]  
     var arr1=[...arr]

   console.log(arr==arr1) //是为false 的 因为arr 是一个堆内存 arr1也是一个堆内存

   console.log(arr[2]==arr1[2]) //是为true的 因为 arr添加到了arr1里面
   此时arr1后面的数组等于arr1
   

方法一、JSON.stringify 、JSON.parse

 var arr = [1, 6, 5, [8, 9]]
    var arr1 = [...arr]
    console.log(arr == arr1)
    console.log(arr[2] == arr1[2])
    arr[2] = 3
    console.log(arr)
    console.log(arr1)
    var arr1 = JSON.stringify(arr1)
    var arr1 = JSON.parse(arr1)
    arr1[2] = 6
    console.log(arr1)
    console.log(arr)

方法二、手写深拷贝


   

 1. function f(obj={}){
            //判断 obj不等于对象或者等于空直接返回
            if(typeof obj !=='object'||obj==null){
                return obj
            }
            //初始化值
            var a
            if(obj instanceof Array){              //判断用instanceof 判断obj如果是对象的话就返回一个对象                                                 
    
                a=[]
            }else{
                a={}
            }
            for (var key in obj){                   //然后用for in循环  循环出key值
                //判断不是原型是数据
                if(obj.hasOwnProperty(key)){
                    a[key]=f(obj[key])
    
                }
            }
            return a
        }

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

js手写深拷贝的实现

js手写深拷贝的实现

深拷贝(什么是深拷贝,为什么要进行深拷贝,如何进行深拷贝(至少写三种方法,手写深拷贝))

手写深拷贝

手写实现深拷贝函数

手写实现深拷贝函数