一 基本数据类型:互不影响
var a=3;
var b=a;
a=4;
console.log(a,b) //4,3
二 引用类型值:
1.浅复制:复制的是地址指针,不会开辟新的地址空间,改变一个,另一个也会受影响
(1)数组浅复制,通过直接赋值:
var a=[1,2,3];
var b=a;
console.log(a,b); //[1,2,3] [1,2,3]
a.push(4);
console.log(a,b); //[1,2,3,4] [1,2,3,4]
(2)对象浅复制,通过直接赋值:
var a={name:'bob',age:'23'};
var b=a;
console.log(a,b); //{name: "bob", age: "23"} {name: "bob",age: "23"}
a.age=22;
console.log(a,b); //{name: "bob", age: 22} {name: "bob", age: 22}
2.深复制:复制的是地址指针,开辟新的地址空间,互不影响
(1) 数组深复制:
方法1,slice方法:
var a=[1,2,3];
var b=a.slice(0);
console.log(a,b); //[1,2,3] [1,2,3]
a.push(4);
console.log(a,b); //[1,2,3,4] [1,2,3]
方法2,concat方法:
var a=[1,2,3];
var b=a.concat();
console.log(a,b); //[1,2,3] [1,2,3]
a.push(4);
console.log(a,b); //[1,2,3,4] [1,2,3]
方法3,遍历方法:
var a=[1,2,3];
var b=[];
for(var i=0;i<a.length;i++)
{
b[i]=a[i];
}
console.log(a,b); //[1,2,3] [1,2,3]
a.push(4);
console.log(a,b); // [1,2,3,4] [1,2,3]
(2)对象深复制:
方法1,遍历:
var a={name:'bob',age:'23'};
var b={};
for (var i in a){
b[i]=a[i];
}
console.log(a,b); //{name: "bob", age: "23"} {name: "bob", age: "23"}
a.age=22;
console.log(a,b); //{name: "bob", age: "22"} {name: "bob", age: "23"}
方法2,JSON的解析和字符串化方法:
var a={name:'bob',age:'23'};
var b=JSON.parse(JSON.stringify(a));
console.log(a,b); //{name: "bob", age: "23"} {name: "bob", age: "23"}
a.age=22;
console.log(a,b); //{name: "bob", age: "22"} {name: "bob", age: "23"}