【JS】手写JS数据深拷贝

拷贝与浅拷贝的区别:深拷贝是拷贝的变量改变时不会影响原数据的值,浅拷贝是拷贝的变量改变时原数据也会同时被改变。深拷贝主要是对于引用类型的数据,对于值类型数据的拷贝不涉及到深拷贝。

说明:在写js代码中经常用到关于变量的处理,特别是处理引用类型数据(主要是数组和对象两类)如果只是简单的使用“=”赋值,则会导致改变一个变量时,另外一个变量就会被“偷偷”的改变。这种情况是我们常常头疼的事,我们需要避免这原数据的改变。

深拷贝代码见下:

【JS】手写JS数据深拷贝
【JS】手写JS数据深拷贝

const arr1 = {

name:‘lishi’,

age:23,

city:{

address:‘上海’

},

angle:[‘man’]

}

console.log(1,arr1.name);

const arr2 = deepClone(arr1);

arr2.name = ‘zhangshan’;

console.log(2,arr1.name,arr2);

function deepClone(obj){

if(typeof obj !== ‘object’ || obj == null){

return obj;

}

let result;

if(obj instanceof Array){

result = [];

}else if(obj instanceof Object){

result = {}

}

for(let key in obj){

// 判断保证key不是原型的属性

if(obj.hasOwnProperty(key)){

// 如果key是原型的属性,则递归调用

result[key] = deepClone(obj[key])

}

}

return result;

}

以上是 【JS】手写JS数据深拷贝 的全部内容, 来源链接: utcz.com/a/68429.html

回到顶部