js 深度拷贝
Posted 浅唱年华1920
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js 深度拷贝相关的知识,希望对你有一定的参考价值。
js 数据类型 分为2种:
基本数据类型:Undefined、Null、Boolean、Number、String
复杂数据类型:Object、Array、function
他们的区别是在内存中的存储方式:
简单数据类型:在栈内直接存储值
复杂数据类型:在栈内存储引用
1. 在简单类型赋值的时候是赋的值, 如下 a 的值是不会被修改的
var a = 1; var b = a; b = 2; console.log(a);//1
2. 复杂类型赋值的时候是赋的地址值,如下a对象下的a属性值会变成2,明明改变的是变量b,变量a却发生了变化,这就是因为赋的地址值,所以b发生变化,a也会受影响
var a = {a:1,b:2}; var b = a; b.a = 2; console.log(a.a);//2
为了让复杂数据类型赋值的时候赋值,而不是赋地址值,就要进行深度拷贝,就是把对象的属性遍历一遍,赋给一个新的对象,数组也是一样的
js 深度拷贝只适用于复杂数据类型,数组对象,基本数据类型
1.最简单的貌似有弊端,没去看过。
var data = JSON.parse(JSON.stringify(obj));
2.
function clone(data){ var obj; if(data instanceof Array){ obj = []; for(var i in data){ obj.push(clone(data[i])); } }else if(data instanceof Object){ obj = {} for(var i in data){ obj[i] = clone(data[i]); } }else{ return data; } return obj; }
以上是关于js 深度拷贝的主要内容,如果未能解决你的问题,请参考以下文章