您好,欢迎访问一九零五行业门户网

JS中深拷贝和浅拷贝区别?

js中深拷贝和浅拷贝区别?
两者的区别在于是否是真正获取了一个对象的复制实体,而不是引用,深拷贝在计算机中开辟了一块内存地址用于存放复制的对象,而浅拷贝仅仅是指向被拷贝的内存地址,如果原地址中对象被改变了,那么浅拷贝出来的对象也会相应改变。
深拷贝
 最简单的方法就是
json.parse(json.stringify())function deepcopy(o) { return json.parse(json.stringify(o))}var c = { age: 1, name: undefined, sex: null, tel: /^1[34578]\d{9}$/, say: () => { console.log('hahha') }}// { age: 1, sex: null, tel: {} }
需要注意的是:这种拷贝方法不可以拷贝一些特殊的属性(例如正则表达式,undefine,function)
用递归去复制所有层级属性
function deepcopytwo(obj) { let objclone = array.isarray(obj) ? [] : {}; if (obj && typeof obj == 'object') { for (const key in obj) { //判断obj子元素是否为对象,如果是,递归复制 if (obj[key] && typeof obj[key] === "object") { objclone[key] = deepcopytwo(obj[key]); } else { //如果不是,简单复制 objclone[key] = obj[key]; } } } return objclone;}
浅拷贝
object.assign(target,source)
object.assign 方法只复制源对象中可枚举的属性和对象自身的属性
如果目标对象中的属性具有相同的键,则属性将被源中的属性覆盖。后来的源的属性将类似地覆盖早先的属性
object.assign 会跳过那些值为 [null] null 是一个 javascript 字面量,表示空值(null or an empty value),即没有对象被呈现(no object value is present)。它是 javascript 原始值 之一。) 或 undefined 的源对象。
推荐教程:《js教程》
以上就是js中深拷贝和浅拷贝区别?的详细内容。
其它类似信息

推荐信息