js深克隆与浅复制
来源:互联网 发布:淘一免淘宝小号查询 编辑:程序博客网 时间:2024/05/16 14:31
一、js中的对象
谈到对象的克隆,必定要说一下对象的概念。
js中的数据类型分为两大类:原始类型和对象类型。(1)原始类型包括:数值、字符串、布尔值、null、undefined(2)对象类型包括:对象即是属性的集合,当然这里又两个特殊的对象—-函数(js中的一等对象)、数组(键值的有序集合)。
好了既然对象分为这两类,这两种类型在复制克隆的时候是有很大区别的。原始类型存储的是对象的实际数据,而对象类型存储的是对象的引用地址(对象的实际内容单独存放,为了减少数据开销通常存放在内存中)。ps:说到这里,大家要知道,对象的原型也是引用对象,它把原型的方法和属性放在内存当中,通过原型链的方式来指向这个内存地址。
二、克隆的概念
浅度克隆:原始类型为值传递,对象类型仍为引用传递。
深度克隆:所有元素或属性均完全复制,与原对象完全脱离,也就是说所有对于新对象的修改都不会反映到原对象中。
浅复制例子
var obj={"a":1,"b":2}var objClone = obj;obj.a=3;console.log(obj);///{"a":3,"b":2}变了console.log(objClone);///{"a":3,"b":2}也变了
深克隆例子
function deepClone(x){ var y={}; for(i in x){ y[i] = (typeof(x[i])==='object')?deepClone(x[i]):x[i]; //递归 } return y;}var obj={"a":1,"b":2}var objClone = deepClone(obj);obj.a=3;console.log(obj);//{"a":3,"b":2}变了console.log(objClone);//{"a":1,"b":2}未变,哇哇
又一个例子
要实现深复制有很多办法,比如最简单的办法有:
var cloneObj = JSON.parse(JSON.stringify(obj));
题外话
例题:请写一个函数,将一个多维数组的值提取成一串字符串
var arr2 = [];function turnStr(arr){ for(var i in arr){ if(arr[i] instanceof Array){ turnStr(arr[i]); }else{ arr2.push(arr[i]) } } return arr2;//[1,2,3,4,5,6,7]}var arr=[1,[2,[3]],[4,[5,[6,[7]]]]];var arrStr=turnStr(arr).join('');//turn arr to stringconsole.log(arrStr);//"1,2,3,4,5,6,7"
#
阅读全文
0 0
- js深克隆与浅复制
- JAVA深复制(深克隆)与浅复制(浅克隆)
- JAVA深复制(深克隆)与浅复制(浅克隆)
- JAVA深复制(深克隆)与浅复制(浅克隆)
- JAVA深复制(深克隆)与浅复制(浅克隆)
- JAVA深复制(深克隆)与浅复制(浅克隆)
- JAVA深复制(深克隆)与浅复制(浅克隆)
- JAVA深复制(深克隆)与浅复制(浅克隆)
- JAVA深复制(深克隆)与浅复制(浅克隆)
- JAVA深复制(深克隆)与浅复制(浅克隆)
- JAVA深复制(深克隆)与浅复制(浅克隆)
- JAVA深复制(深克隆)与浅复制(浅克隆)
- JAVA深复制(深克隆)与浅复制(浅克隆)
- JAVA深复制(深克隆)与浅复制(浅克隆)
- JAVA深复制(深克隆)与浅复制(浅克隆)
- JAVA深复制(深克隆)与浅复制(浅克隆)
- JAVA深复制(深克隆)与浅复制(浅克隆)
- JAVA深复制(深克隆)与浅复制(浅克隆)
- elasticsearch内部原理自我总结
- Ubuntu16.04 LTS 安装VNC Server开启远程桌面
- 关于python科学计算中的axis取值问题
- python3.4下使用py2exe将py脚本打包为exe
- C++ Primer 初窥成员函数
- js深克隆与浅复制
- Android热修复—阿里的新一代热修复技术Sophix
- stm32 read out protection
- 数据结构一(概念)
- test
- 常见http status code
- 高德地图之实例开发(一)加载地图
- Genymotion错误
- Android Context 上下文 你必须知道的一切