注意:数组和对象都是引用类型。
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( ) 是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() 是浅复制
{...object}} 是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 = {...person1};
person1==person3; //false person3 是 person1 的复本
person1.friends==person3.friends; //true 说明 Object.assign() 是浅复制
4、对象深复制 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(..)) 是深复制