核心提示:实例一:var a = 5;var b = a;b += 3;alert(b);//8alert(a);//5/** * 建立一个变量 a,一个变量b,把 a 的值赋值给 b * b 的值改变不会影响...
实例一:
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


