JavaScript 數組和對象的複製

1、數組的複製

var a = [1,2,3];
b = a.concat(); //b稱爲a的複本

a[3]=4;
a;              //[1,2,3,4]
b;              //[1,2,3]

/* 另一種ES6寫法,使用了擴展語法 */
var a = [1,2,3];
b = [...a];     //b稱爲a的複本

a[3]=4;
a;              //[1,2,3,4]
b;              //[1,2,3]

2、Object.assign() 對象淺複製

Object.assign( )是ES6語法

function Person(name, age, job){
    this.name = name;
    this.age = age;
    this.job = job;
    this.friends = ["Shelby", "Court"];
}

Person.prototype = {
    constructor : Person,
    sayName : function(){
        alert(this.name);
    }
}

var person1 = new Person("Nicholas", 29, "Software Engineer");
var person2 = new Person("Greg", 27, "Doctor");

person1.friends.push("Van");

alert(person1.friends); //"Shelby,Count,Van"
alert(person2.friends); //"Shelby,Count"

alert(person1.friends === person2.friends); //false
alert(person1.sayName === person2.sayName); //true

person3 = Object.assign({}, person1);
person1==person3;                        //false person3 是 person1 的複本
person1.friends==person3.friends;        //true 說明 Object.assign() 是淺複製

3、對象深複製 JSON.parse(JSON.stringify(object));

function Person(name, age, job){
    this.name = name;
    this.age = age;
    this.job = job;
    this.friends = ["Shelby", "Court"];
}

Person.prototype = {
    constructor : Person,
    sayName : function(){
        alert(this.name);
    }
}

var person1 = new Person("Nicholas", 29, "Software Engineer");
var person2 = new Person("Greg", 27, "Doctor");

person1.friends.push("Van");

alert(person1.friends); //"Shelby,Count,Van"
alert(person2.friends); //"Shelby,Count"

alert(person1.friends === person2.friends); //false
alert(person1.sayName === person2.sayName); //true

person3 = JSON.parse(JSON.stringify(person1));;
person1==person3;                        //false person3 是 person1 的複本
person1.friends==person3.friends;        //false 說明 Json.parse(Json.stringify(..)) 是深複製
 

 

參考文獻:https://www.jianshu.com/p/d5f572dd3776

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章