核心提示:实例一: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