js 深度拷貝
阿新 • • 發佈:2018-05-15
修改 UNC fun num log instance urn boolean clone
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 深度拷貝