js 浅拷贝和深拷贝原理
拷贝,从字面意思上解释即为将原有的东西,复制一份出来;在代码中,我们如何解释呢?
在代码中,拷贝分为了两种形式:一种是浅拷贝,一种是深拷贝。
什么是浅拷贝
通俗的讲:就是把父对象的内容,全部拷贝给子对象。然而,实际上是,子对象只获得了父对象的一个内存地址。那么,子对象改变值,父对象的值也会被篡改。
-
浅拷贝 ---- 此拷贝会改变原有值
1.赋值拷贝var p = {"color":'red'}; var p1 = p; p1.color = 'blue'; console.log(p);
2.使用方法赋值拷贝
var obj = {"name":'Join',"age":30,"fruit":{"apple":5,"pear":6}}; var obj1 = copy(obj); obj1.name = 'Tom'; obj1.fruit.apple = 10; console.log(obj); function copy(obj){ var result = {}; for(var key in obj){ result[key] = obj[key]; } return result; }
什么是深拷贝
与浅拷贝不同的是,深拷贝后,父对象的内容不会因为子对象的内容改变而改变。
-
深拷贝 — 此拷贝不会改变原有值,即使用递归的方式操作
var car = {"name":{"Benz":{"color":"red"},"BMW":{"color":"black"}}}; var car1 = deepCopy(car); car1.name.Benz.color = "white"; console.log(car); function deepCopy(obj){ var res = {}; for(var key in obj){ if(typeof obj[key] == "object"){ res[key] = deepCopy(obj[key]); }else{ res[key] = obj[key]; } } return res; }
对于上面的拷贝方式,在jquery中,extend() 方法使用的就是上面的原理。