关于javascript:手写实现深拷贝

深拷贝和浅拷贝的区别

1.当拷贝到值是对象或数组时,浅拷贝只复制了值的援用,没有将对象所占的内存齐全拷贝下来。根本数据类型可间接复制。
判断点:当拷贝对象数据类型时,能够看是否产生了新的数据还是只是复制了值的援用。

代码实现

 // 判断数组或对象类型

 function cloneType (target) {

 return Object.prototype.toString.call(target).slice(8,-1)

 }

  

 // 深拷贝

 function cloneDeep (target) {

 let result

 if (cloneType(target) === 'Object'){

 result = {}

 }else if (cloneType(target) === 'Array') {
 
 result = []
 
 }

 else {
 
    result = target
    
 }

 for(let i in target) {

 let item = target[i]

 if (cloneType(item)==='Object' || cloneType(item) ==='Array' ) {

 result[i] = cloneDeep(item)

 }else {

    result[i] = item

   } 

 }

 return result

}
验证后果
 let person = {name: 'zhangsan', age: 13, 

 option:{

 sex:'man',

 fav:'football'

 }

 }

 let person2 = cloneDeep(person)

 console.log(person2)

 console.log('---------------')

 person.option.sex = 'woman'

 console.log(person2)

实现思路
1.次要是通过递归的思维来实现,要判断以后拷贝是什么数据类型,来决定函数要返回什么样的数据类型。
2.接着如果确定是对象数据类型之后再判断外面是否还有援用类型的数据,若有则反复之前的步骤直到拷贝的是根本数据类型。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理