实例一:
var a = 5;
var b = a;
b += 3;
alert(b);//8
alert(a);//5
/**
* 建立一个变量 a,一个变量b,把 a 的值赋值给 b
* b 的值改变不会影响 a 的值,这就是一个简单的赋值关系
* 这种赋值关系主要存在于 基本类型中(比如说:String,Number,Boolean,Undefined,null)
*/
实例二:
var a = [1,2,3];
var b = a;
b.push(4);
alert(b);//1,2,3,4
alert(a);//1,2,3,4
/**
* 在这种情况下不是复制的关系而是引用的关系,这就是对象的引用
* 除了对象,函数也会有这个特点
*/
实例三:
var a = [1,2,3];
var b = a;
//b这个时候在内存中重新占据了一块地址,这个时候它和 a 分离了
//这个时候你再修改b,就不会影响到 a 了
b = [1,2,3,4];
alert(b);//1,2,3,4
alert(a);//1,2,3
实例四:
var obj1 = {
a : 10
}
var obj2 = obj1;
obj2.a = 20;
alert(obj1.a);//20
/**
* 可以看到此时修改 obj2 的属性 影响了 obj1
* 我们复制一个对象给另一个对象,那当你改另一个对象的时候
* 会影响到之前的对象,这肯定是我们不希望看到的
*
* 那我们要克隆或者是拷贝一个对象要怎么做呢?看下一个实例
*/
实例五(浅拷贝):
var obj1 = {
a : 10
}
function copy(obj){//浅拷贝
var newObj = {};
for(var attr in obj){
newObj[attr] = obj[attr];
}
return newObj;
}
var obj2 = copy(obj1);
obj2.a = 20;
alert(obj1.a);//10
实例六(深拷贝):
var obj1 = {
a : {b : 10}
}
function deepCopy(obj){//深拷贝,我们使用递归的方法来实现
//终止条件,即什么时候 obj 不是对象就可以返回了
if(typeof obj != 'object'){
return obj;
}
var newObj = {};
for(var attr in obj){
newObj[attr] = deepCopy(obj[attr]);
}
return newObj;
}
var obj2 = deepCopy(obj1);
obj2.a.b = 20;
alert(obj1.a.b);//10