1.浅拷贝及深拷贝的介绍 浅拷贝是拷贝一层,深层次的对象级别的就拷贝引用(这时引用更改,其拷贝值也会跟着更改)
深拷贝是拷贝多层,每一级别的数据都会拷贝出来;
浅拷贝的时候如果数据是基本数据类型,那么就如同直接赋值那种,会拷贝其本身,如果除了基本数据类型之外还有一层对象,那么对于浅拷贝而言就只能拷贝其引用,对象的改变会反应到拷贝对象上;但是深拷贝就会拷贝多层,即使是嵌套了对象,也会都拷贝出来。
2.浅拷贝的实现 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <script > var obj = { name:'小蚂蚁' , age: 26, sex:'male' , arr:[1,2,3] } var obj1 = {}; function clone (origin,target) { var target = target ||{}; for (var prop in origin){ target[prop] = origin[prop]; } return target; } clone(obj,obj1); </script >
3.深拷贝的实现 1 2 3 4 5 1 .遍历对象 for (var prop in obj)2 .判断是不是原始值 typeof() object 3 .判断是数组还是对象 instanceof Object .prototype.toString.call constructor 4.建立相应的数组或对象 5.递归实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 <script> var obj = { name:'小蚂蚁', age:12, arr:[1,2,3,4] } var obj1 = {}; function deepClone(origin,target){ var target = target ||{}; var toStr = Object.prototype.toString ; var arrStr = '[object Array]'; for (var prop in origin){ if (origin.hasOwnProperty(prop )){ if (origin[prop ]!=="null" &&typeof (origin[prop ])=='object'){ if (toStr.call(origin[prop ])==arrStr){ target [prop ] = []; } else { target[prop ] = {} } deepClone(origin[prop ],target[prop ]) }else { target[prop ] = origin[prop ]; } } } return target; } </script>
赞赏
感谢鼓励