1. 程式人生 > >js 深度拷貝

js 深度拷貝

修改 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 深度拷貝