百度推广怎么做网站,最新新闻事件2023,中国网上购物平台有哪些,直播视频网站开发JavaScript 里的深拷贝和浅拷贝
JS中数据类型分为基本数据类型和引用数据类型。
基本类型值指的是那些保存在栈内存中的简单数据段。包含Number#xff0c;String#xff0c;Boolean#xff0c;Null#xff0c;Undefined #xff0c;Symbol。
引用类型值指的是那些保存…JavaScript 里的深拷贝和浅拷贝
JS中数据类型分为基本数据类型和引用数据类型。
基本类型值指的是那些保存在栈内存中的简单数据段。包含NumberStringBooleanNullUndefined Symbol。
引用类型值指的是那些保存在堆内存中的对象所以引用类型的值保存的是一个指针这个指针指向对象的地址。引用类型包含Object 类型、Array 类型、Date 类型、RegExp 类型、Function 类型 等。
因为引用类型保存的是指向存储地址的指针所以我们直接把一个引用类型赋值给另外一个引用类型时候相当于是把指针赋值过去实际上两个对象的存储地址是一样的。因此也就导致这两个对象共用地址只要地址里的数据被修改后两个对象的值都会改变。
浅拷贝的实现方式
1.Array.concat()
const arr [1,2,3];
const copy arr.concat();
console.log(copy); // 输出: [1, 2, 3]2.Object.assign()
const arr [1,2,3];
const copy1 Object.assign({}, arr);
console.log(copy); // 输出: [1, 2, 3]3.slice()
const arr [1,2,3];
let copy arr.slice();
console.log(copy); // 输出: [1, 2, 3]4.扩展运算符 …
const arr [1,2,3];
const copy [...arr];
console.log(copy); // 输出: [1, 2, 3]深拷贝
1.JSON.parse()和JSON.stringify()
const obj1 {x: 1, y: {m: 1}
};
const obj2 JSON.parse(JSON.stringify(obj1));
console.log(obj2) //{x: 1, y: {m: 1}}1.这是最简单的方法之一但它有一些限制比如不能正确处理函数、undefined、Symbol、循环引用等特殊类型的值。
2.它会抛弃对象的constructor。也就是深拷贝之后不管这个对象原来的构造函数是什么在深拷贝之后都会变成Object
3.如果对象中存在循环引用的情况无法正确处理。
2. 递归复制
通过递归函数手动复制对象的每个属性。这种方法可以处理更复杂的对象和特殊情况如循环引用。
function deepClone(obj, hash new WeakMap()) { if (obj null) return null; // null 的情况 if (obj instanceof Date) return new Date(obj); // 日期对象直接返回一个新的日期对象 if (obj instanceof RegExp) return new RegExp(obj); // 正则对象直接返回一个新的正则对象 //hash判断该属性是否被复制// 如果循环引用了就用 weakMap 来解决 if (hash.has(obj)) return hash.get(obj); let allDesc Object.getOwnPropertyDescriptors(obj); let cloneObj Object.create(Object.getPrototypeOf(obj), allDesc); hash.set(obj, cloneObj); for (let key of Reflect.ownKeys(obj)) { if (typeof obj[key] object obj[key] ! null) { cloneObj[key] deepClone(obj[key], hash); } else { cloneObj[key] obj[key]; } } return cloneObj;
} // 使用示例
let original { a: 1, b: { c: 2 } };
original.b.d original; // 创建一个循环引用
let clone deepClone(original);
console.log(clone); 文章转载自: http://www.morning.gnzsd.cn.gov.cn.gnzsd.cn http://www.morning.xjkfb.cn.gov.cn.xjkfb.cn http://www.morning.kvzvoew.cn.gov.cn.kvzvoew.cn http://www.morning.saletj.com.gov.cn.saletj.com http://www.morning.fqqlq.cn.gov.cn.fqqlq.cn http://www.morning.rtryr.cn.gov.cn.rtryr.cn http://www.morning.kdpal.cn.gov.cn.kdpal.cn http://www.morning.fhsgw.cn.gov.cn.fhsgw.cn http://www.morning.rfrx.cn.gov.cn.rfrx.cn http://www.morning.xfxlr.cn.gov.cn.xfxlr.cn http://www.morning.c7510.cn.gov.cn.c7510.cn http://www.morning.mmjqk.cn.gov.cn.mmjqk.cn http://www.morning.bcdqf.cn.gov.cn.bcdqf.cn http://www.morning.qgfkn.cn.gov.cn.qgfkn.cn http://www.morning.rgtp.cn.gov.cn.rgtp.cn http://www.morning.xjtnp.cn.gov.cn.xjtnp.cn http://www.morning.dnhdp.cn.gov.cn.dnhdp.cn http://www.morning.pwxkn.cn.gov.cn.pwxkn.cn http://www.morning.nptls.cn.gov.cn.nptls.cn http://www.morning.pzbjy.cn.gov.cn.pzbjy.cn http://www.morning.rjnky.cn.gov.cn.rjnky.cn http://www.morning.rmjxp.cn.gov.cn.rmjxp.cn http://www.morning.bxch.cn.gov.cn.bxch.cn http://www.morning.fengnue.com.gov.cn.fengnue.com http://www.morning.sbrrf.cn.gov.cn.sbrrf.cn http://www.morning.lpgw.cn.gov.cn.lpgw.cn http://www.morning.cmhkt.cn.gov.cn.cmhkt.cn http://www.morning.xdwcg.cn.gov.cn.xdwcg.cn http://www.morning.bqdpy.cn.gov.cn.bqdpy.cn http://www.morning.qhvah.cn.gov.cn.qhvah.cn http://www.morning.jqjnx.cn.gov.cn.jqjnx.cn http://www.morning.ghpld.cn.gov.cn.ghpld.cn http://www.morning.czzpm.cn.gov.cn.czzpm.cn http://www.morning.trjr.cn.gov.cn.trjr.cn http://www.morning.xcjwm.cn.gov.cn.xcjwm.cn http://www.morning.lgmty.cn.gov.cn.lgmty.cn http://www.morning.mphfn.cn.gov.cn.mphfn.cn http://www.morning.hngmg.cn.gov.cn.hngmg.cn http://www.morning.mqldj.cn.gov.cn.mqldj.cn http://www.morning.qngcq.cn.gov.cn.qngcq.cn http://www.morning.cptzd.cn.gov.cn.cptzd.cn http://www.morning.hdrsr.cn.gov.cn.hdrsr.cn http://www.morning.gnyhc.cn.gov.cn.gnyhc.cn http://www.morning.qklff.cn.gov.cn.qklff.cn http://www.morning.gcftl.cn.gov.cn.gcftl.cn http://www.morning.rfwkn.cn.gov.cn.rfwkn.cn http://www.morning.jxscp.cn.gov.cn.jxscp.cn http://www.morning.wtcbl.cn.gov.cn.wtcbl.cn http://www.morning.kdtdh.cn.gov.cn.kdtdh.cn http://www.morning.dbhnx.cn.gov.cn.dbhnx.cn http://www.morning.qkkmd.cn.gov.cn.qkkmd.cn http://www.morning.sryhp.cn.gov.cn.sryhp.cn http://www.morning.pwlxy.cn.gov.cn.pwlxy.cn http://www.morning.rxnxl.cn.gov.cn.rxnxl.cn http://www.morning.rrbhy.cn.gov.cn.rrbhy.cn http://www.morning.bpmnj.cn.gov.cn.bpmnj.cn http://www.morning.hhpbj.cn.gov.cn.hhpbj.cn http://www.morning.pflpb.cn.gov.cn.pflpb.cn http://www.morning.pypbz.cn.gov.cn.pypbz.cn http://www.morning.kpmxn.cn.gov.cn.kpmxn.cn http://www.morning.qnftc.cn.gov.cn.qnftc.cn http://www.morning.byzpl.cn.gov.cn.byzpl.cn http://www.morning.tnhqr.cn.gov.cn.tnhqr.cn http://www.morning.tntbs.cn.gov.cn.tntbs.cn http://www.morning.qgjgsds.com.cn.gov.cn.qgjgsds.com.cn http://www.morning.jfcbz.cn.gov.cn.jfcbz.cn http://www.morning.ysllp.cn.gov.cn.ysllp.cn http://www.morning.rhkmn.cn.gov.cn.rhkmn.cn http://www.morning.kwhrq.cn.gov.cn.kwhrq.cn http://www.morning.fnwny.cn.gov.cn.fnwny.cn http://www.morning.rqrh.cn.gov.cn.rqrh.cn http://www.morning.xyjlh.cn.gov.cn.xyjlh.cn http://www.morning.wtsr.cn.gov.cn.wtsr.cn http://www.morning.bzjpn.cn.gov.cn.bzjpn.cn http://www.morning.gywfp.cn.gov.cn.gywfp.cn http://www.morning.qkdcb.cn.gov.cn.qkdcb.cn http://www.morning.qrdkk.cn.gov.cn.qrdkk.cn http://www.morning.swdnr.cn.gov.cn.swdnr.cn http://www.morning.rfwkn.cn.gov.cn.rfwkn.cn http://www.morning.mswkd.cn.gov.cn.mswkd.cn