手写深拷贝
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
}
以上是关于手写深拷贝的主要内容,如果未能解决你的问题,请参考以下文章