深浅拷贝,温故知新_短讯
对象的深拷贝是指其属性与其拷贝的源对象的属性不共享相同的引用(指向相同的底层值)的副本。
因此,当你更改源或副本时,可以确保不会导致其他对象也发生更改;也就是说,你不会无意中对源或副本造成意料之外的更改。
在深拷贝中,源和副本是完全独立的。深拷贝与其源对象不共享引用,所以对深拷贝所做的任何更改都不会影响源对象。
(相关资料图)
JSON.stringify()
将该对象转换为 JSON 字符串,然后使用 JSON.parse()
将该字符串转换回(全新的)JavaScript 对象。前提:JavaScript 对象可以被序列化
序列化异常报错
存在循环引用时,会抛出异常 TypeError ("cyclic object value")(循环对象值)存在 BigInt 类型的值时,如:{ num: BigInt(1111111111) }
会抛出 TypeError ("BigInt value can"t be serialized in JSON")(BigInt 值不能 JSON 序列化).序列化需要注意的隐式转换
非数组对象的属性不能保证以特定的顺序出现在序列化后的字符串中undefined
、任意的函数以及 symbol
值,在序列化过程中会被忽略(出现在非数组对象的属性值中时)或者被转换成 null
(出现在数组中时)。函数、undefined
被单独转换时,会返回 undefined
,如 JSON.stringify(function(){})
or JSON.stringify(undefined)
.所有以 symbol
为属性键的属性都会被完全忽略掉,即便 replacer
参数中强制指定包含了它们。Date
日期,会调用 toJSON()
将其转换为 string 字符串(同 Date.toISOString())
NaN
和 Infinity
格式的数值及 null
都会被当做 null
Map/Set/WeakMap/WeakSet
,仅会序列化可枚举的属性HTML 元素对象, 会得到 {}
示例
// 隐式转换 JSON.stringify([new Number(1), new String("false"), new Boolean(false)]); // "[1,"false",false]" JSON.stringify({x: undefined, y: Object, z: Symbol("")}); // "{}" JSON.stringify([undefined, Object, Symbol("")]); // "[null,null,null]" JSON.stringify({[Symbol("foo")]: "foo"}); // "{}" JSON.stringify({[Symbol.for("foo")]: "foo"}, [Symbol.for("foo")]); // "{}" JSON.stringify( {[Symbol.for("foo")]: "foo"}, function (k, v) { if (typeof k === "symbol"){ return "a symbol"; } } ); // undefined // 不可枚举的属性默认会被忽略: JSON.stringify( Object.create( null, { x: { value: "x", enumerable: false }, y: { value: "y", enumerable: true } } ) ); // "{"y":"y"}" JSON.stringify(document.body) // "{}" JSON.stringify(new Set([1, 2, 3])) // "{}" JSON.stringify(new Map([["num", 2]])) // "{}"
1.2.2、使用 window.structuredClone()
,使用结构化克隆算法将给定的值进行深拷贝。前提:可序列化的对象,且在浏览器环境和任何其他实现了 window 这样全局对象的 JavaScript 运行时的环境(structuredClone() 不是 JavaScript 语言本身的特性)
优点
支持把原始值中的可转移对象转移到新对象,而不是把属性引用拷贝过去。可转移对象与原始对象分离并附加到新对象; 它们不可以在原始对象中访问被访问到。支持循环引用补充:结构化克隆算法
结构化克隆算法是用于复制复杂 js 对象的算法。它通过递归输入对象来构建克隆,同时保持先前访问过的引用的映射,以避免无限遍历循环。Worker 的postMessage()
或 IndexedDB
存储对象时内部使用该算法。所以,也可间接的通过这2个方法实现深拷贝。补充:可转移对象
可转移的对象(Transferable object)是拥有属于自己的资源的对象,这些资源可以从一个上下文转移到另一个,确保资源一次仅在一个上下文可用。传输后,原始对象不再可用;它不再指向转移后的资源,并且任何读取或者写入该对象的尝试都将抛出异常。可转移对象通常用于共享资源,该资源一次仅能安全地暴露在一个 js 线程中。如:ArrayBuffer
是一个拥有内存块的可转移对象。当此类缓冲区(buffer)在线程之间传输时,相关联的内存资源将从原始的缓冲区分离出来,并且附加到新线程创建的缓冲区对象中。原始线程中的缓冲区对象不再可用,因为它不再拥有属于自己的内存资源了。异常报错
Function 对象是不能被结构化克隆算法复制的,抛出 DATA_CLONE_ERR 异常,如:structuredClone(function fn() {})
Symbol 不能被结构化克隆算法复制的,抛出 DATA_CLONE_ERR 异常,如:structuredClone({s: Symbol(1)})
HTML 元素对象,抛出 DATA_CLONE_ERR 异常,如:structuredClone(document.body)
隐式转换
RegExp
对象的 lastIndex
字段不会被保留属性描述符,setters
以及 getters
(以及其他类似元数据的功能)同样不会被复制。例如,如果一个对象用属性描述符标记为 read-only
,它将会被复制为 read-write
,因为这是默认的情况下原形链上的属性也不会被追踪以及复制支持的js类型
Array、ArrayBuffer、Boolean、DataView、Date、Map、Set、String、TypedArrayError 类型(仅限部分 Error 类型)。Object 对象:仅限简单对象(如使用对象字面量创建的)。除 symbol 以外的基本类型。RegExp:lastIndex 字段不会被保留。支持的 Error类型
Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError(或其他会被设置为 Error 的)。示例
// 循环引用const original = { name: "MDN" };original.itself = original;// cloneconst clone = structuredClone(original);// 验证console.log(clone !== original) // trueconsole.log(clone.name === "MDN") // trueconsole.log(clone.itself === clone) // trueconst get = { get foo() { return "bar" } }console.log(get.foo) // "bar"class MyClass { foo = "bar" myMethod() { /* ... */ }}const myClass = new MyClass()const cloned = structuredClone(myClass)// { foo: "bar" }cloned instanceof myClass // false
1.2.3、 使用js库比如 lodash 中的 cloneDeep()
方法
该方法会递归拷贝 value。
clone 方法参考自 结构化克隆算法 以及支持 arrays
、array buffers
、 booleans
、 date objects
、maps
、 numbers
, Object
对象, regexes
, sets
, strings
, symbols
, 以及 typed arrays
。 arguments
对象的可枚举属性会拷贝为普通对象。 一些不可拷贝的对象,例如 error objects
、functions
, DOM nodes
, 以及WeakMaps
会返回空对象。
参考:MDN
深拷贝JSON.stringify()结构化克隆算法可转移对象2、浅拷贝2.1、概念对象的浅拷贝是其属性与拷贝源对象的属性共享相同引用(指向相同的底层值)的副本。
因此,当你更改源或副本时,也可能导致其他对象也发生更改——也就是说,你可能会无意中对源或副本造成意料之外的更改。
在浅拷贝中,对源或副本的更改可能也会导致其他对象的更改(因为两个对象共享相同的引用)。
2.2、实现方式在 js 中,所有标准的内置对象进行操作:...
展开语法、Array.prototype.concat()
、Array.prototype.slice()
、Array.from()
、Object.assign()
和 Object.create()
,创建的都是浅拷贝而不是深拷贝。
参考:MDN 浅拷贝
最后,感谢您阅读这篇博客!希望本文能够为您提供有价值的信息和启示。
如果您对本文的内容有任何疑问或建议,请随时在评论区留言,我会尽快回复您。
标签:
上一篇:【全球快播报】滦南农商银行多举措提升统计数据治理水平
下一篇:最后一页
- 深浅拷贝,温故知新_短讯
- 【全球快播报】滦南农商银行多举措提升统计数据治理水平
- 20个不可思议的历史事实,颠覆你对时间的认知!
- 参保人员如何办理异地就医备案?北京医保局解答异地就医热点问题
- 世界关注:键盘fn键开启和关闭_fn键盘上的按键功怎么关闭
- 焦点热文:TD早报 | 携程旅游事业部人事任命;广深港高铁“地铁化”有望年内实现
- 典押的拼音怎么读_典押的意思-每日报道
- 【全球独家】益农社家电补贴_益农社
- 生活更方便 群众更幸福(深阅读)
- 2022武汉双年展论坛成功举办:展览预约访问量逾52万余人次,网络多平台展览转载浏览总量逾1000万人次
- 5月10日基金净值:浙商丰利增强债券最新净值1.8102,跌0.47%_微速讯
- 世界最资讯丨焦点小组和名义小组区别_焦点小组
- 市长对话:直面机遇与挑战,共寻城市旅游发展新措施
- fibreno是什么档次 fino是什么品牌
- 【天天报资讯】面部皮肤下垂怎么办_有什么方法紧致肌肤
- 【世界聚看点】内控管理的意义
- 北师大舞蹈学怎么就业招生简章录取分数线
- 美国历史学家麦科伊:中国将成为欧亚大陆和平缔造者
- 微信被举报该怎么办_微信被举报要怎么处理|全球热文
- 多重优势加码 若羽臣赋能品牌价值持续增长
- 每日热闻!早泄阴囊潮湿是阴虚还是阳虚_阴囊潮湿是阴虚还是阳虚
- 天舟六号货运飞船将于今日发射
- 幻想恋人陈奕迅_幻想恋人-环球新要闻
- 世界今头条!请张颂文代言,海澜之家赢了?
- 资讯推荐:「吴山时评」文艺为乡村共富赋能
- 5月10日山东地区液化气市场动态
- 揭秘浪姐陈冰家族商业版图 每日消息
- 天天资讯:未病先防:兰溪诸葛村民居文物建筑预防性保护试点项目打造全省典范
- 【世界热闻】2023年Q1全球AMOLED手机面板出货量约1.4亿片同比下滑11.4%
- 三巨头合砍80分!76人拿下天王山之战,凯尔特人出局在即!
- 应急管理部:完善重大事故隐患数据库机制|每日快讯
- 天天新动态:2023广东韶关市浈江区新韶镇人民政府考试录用公务员拟录用名单公示
- 76人上一次在次轮3-2领先还是2001年 那一年艾弗森带队进总决赛
- 山西上市公司分红越来越大方 三家晋企进入股息率排行榜前二十位
- 世界快播:港股异动 | 中广核矿业(01821)高开逾3% 今年一季度计划完成率99.4%
- 【世界快播报】大祥区:严把“四关”全力做好扶贫资产管理提级整改
- 2023年5月9日河南省阻垢缓蚀剂价格最新行情预测-今日聚焦
- 泉州中心市区五个公园“美容”环境美了休闲更方便了
- 全球百事通!夏日花海
- 四川消费者个人信息保护情况调查报告出炉_全球消息
- 传统文化为城市游“加分”|天天微动态
- 5月9日基金净值:嘉实稳固收益债券A最新净值1.119,跌0.18%
- 澳政府公布新财年预算案 通货膨胀仍是主要挑战 环球聚焦
- 今日4米2高栏货车能买吗_4米2高栏货车好配货吗
- 加倍支付迟延履行的债务利息如何规定的? 当前热讯
- 吉林碳谷2022年度业绩说明会
- 今日快看!布偶猫多少钱一只便宜_布偶猫多少钱一只
- 环球今亮点!一度涨停!国产OLED崛起 下一步将攻克中大尺寸OLED
- 发光玩具批发一手货源哪 世界聚焦
- 岩石的结构与构造名词解释_坚硬岩石 地质学名词-世界最资讯
-
当前速看:欧冠官方盘点皇马队史欧冠进球榜:C罗第一,巴西双子星冲击前十
欧冠官方盘点皇马队史欧冠进球榜:C罗第一,巴西双子星冲击前十,c罗,巴西,皇马,史欧冠,本泽马,皇家马德里,
-
怎么跟喜欢的男孩子表白?这几招教给你
女生应该怎样像喜欢的男生表白?这几招教给你都说男追女隔层山,女追男隔层纱。这样看来女生向男生表白成功
-
埃里克森:欧冠半决赛我支持国米晋级,当初离开是唯一的选择|焦点观察
直播吧5月9日讯获得2023年劳伦斯最佳复出奖的埃里克森表示,自己会在欧冠半决赛中支持旧主国米。丹麦中场埃
-
中欧经贸合作成果丰硕:贸易额创新高 投资不断扩大
tjewm{width:100%;text-align:center;margin:30pxauto;display:none;} tjewmspan{d
-
当前要闻:抢劫海盗需要开锁多少(抢劫海盗)
1、对方级别太高你碰到话快走打不赢的。本文就为大家分享到这里,希望看了会喜欢。
-
动态焦点:郑州春藤美寓人才公寓附近有地铁吗?附交通路线
春藤美寓人才公寓附近有地铁吗?有地铁站。附近是1号线郑州大学地铁站,距离春藤美寓549米,步行10分钟。春
-
汉字找茬王唤醒木偶怎么过 关卡通关攻略_全球观天下
汉字找茬王中最新上线了许多趣味关卡,其中唤醒木偶是挑战人数极高的关卡,玩家需要在修复舞台将木偶叫醒才
-
赛科希德(688338)5月9日主力资金净卖出33.67万元_环球速看
截至2023年5月9日收盘,赛科希德(688338)报收于53 73元,下跌1 05%,换手率0 73%,成交量3557 0手,成交额1928 79万元。
-
澳媒:澳大利亚今年流感病例是去年同期5倍
澳大利亚广播公司9日报道称,今年迄今为止澳大利亚确诊流感病例已超过3 2万例,几乎是去年同期的五倍,但儿
-
全球观察:批准预售和现售6万套商品住房 深圳印发住房发展2023年度实施计划
计划供应居住用地330公顷。
-
一季度,边民互市和边境小额贸易合计进出口897亿元,增长111% 边贸活力持续涌现(经济聚焦)
图①:畹町口岸芒满通道,工作人员正在检查出入境车辆。杨佳林摄(人民视觉)图②:调车机牵引完成装箱作业
-
因涉嫌侵权发明专利,京东方起诉三星电子 天天讯息
据21ic获悉,日前京东方因涉嫌侵权发明专利起诉三星电子,近日新增了多则开庭公告,京东方旗下多家子公司对
-
电动“吉姆尼”背个“大手表”!五菱宝骏悦也5月25日上市
电动“吉姆尼”背个“大手表”!五菱宝骏悦也5月25日上市
-
艾尔登法环烛台棒位置视频攻略-天天微资讯
艾尔登法环烛台棒位置很多人不知道在哪,艾尔登法环的武器很多都有特殊的作用,玩家们都想收集,但是不知道
-
美国页岩油钻井成本约两年来首次下降_天天要闻
由于对设备和工人的需求动摇,美国页岩油的钻探成本在大约两年来首次下降
-
设备稼动率高了好还是低了好(设备稼动率是什么意思)
1、基本上稼动率有数种不同的定义,在此略加解释:时间稼动率首先定义最大操作时间,指的是设备可用的最大
-
两部门:房地产经纪机构要合理降低住房买卖和租赁经纪服务费用 天天实时
近年来,部分房地产经纪机构存在利用房源客源优势收取过高费用、未明码标价、捆绑收费、滥用客户个人信息等
-
山西:这两类考生高考可享加分政策
山西:这两类考生高考可享加分政策
-
天天新动态:有效信息的特征有哪些(信息的特征有哪些)
1、(1)可识别性信息是可以识别的,识别又可分为直接识别和间接识别,直接识别是指通过感官的识别,间接识
-
石狮:“见义勇为”守护海岸景区
石狮:“见义勇为”守护海岸景区
-
美国注册法务会计师协会授予向凌云为杰出会员
2023年2月15日美国注册法务会计师协会(ForensicCPASociety)授予美国注册法务会计师向凌云为杰出会员。美国
-
又添好去处!杨浦这座新建的口袋公园你注意到了吗?
武川路社区A5-01地块公共绿地 是杨浦区2023年申报新建的 1座口袋公园 (暂定名称为“政武花园”)...
-
应急管理部——“五一”假期出动消防救援人员32.5万余人次|每日快报
本报北京5月3日电??(记者刘温馨)记者从应急管理部获悉:“五一”假期,国家综合性消防救援队伍在重...
-
腾达建设:5月8日融资买入866.62万元,融资融券余额2.09亿元
5月8日,腾达建设(600512)融资买入866 62万元,融资偿还1028 04万元,融资净卖出161 41万元,融资余额2 09亿元。
-
一粒种子孕育一片产业——乐薯1号脱毒马铃薯成长记_世界快播报
技术人员查看马铃薯脱毒苗长势情况。青海新闻网·大美青海客户端讯立夏的清晨,太阳冉冉升起,弥漫在海...
-
世界要闻:子不教父之过出自哪里_子不教父之过是什么意思
1、意思是:意思是养了孩子不教育是父亲的过错。2、出自宋·王应麟《三字经》:“养不教,父之教;教不...
-
一流大学和一流学科名单_一流学科名单_全球看热讯
1、9月21日,“双一流”大学名单终于公布,一流大学建设高校42所,其中A类36所,B类6所。2、与此前39所985相比
-
入了心的人,一辈子都难忘-世界观天下
这些回忆,可能是某个场合的相遇,和他在一起时的快乐,他曾经给你的关注和温暖。我遇到了一个人,他让我感
-
全球速读:恣意、畅快!体验这些大佛景区新玩法!
最近很多小伙伴在后台跟编编交流想了解大佛景区有哪些玩法今天编编就跟大家分享一下有哪些玩法在大佛景区其
-
易方达战略新兴产业股票C基金经理发生变更
易方达基金管理有限公司5月6日发布公告,易方达战略新兴产业股票C(010392)的基金经理新聘欧阳良琦。数据
-
光线传媒:将AI用于动画电影的制作现在还处在一个探索和实验阶段
光线传媒披露投关活动记录表称,将AI用于动画电影的制作,现在还处在一个探索和实验阶段,所以我们还不能够
-
观点:光线传媒(300251.SZ):AI可能比以往的技术和产品对人类进步的推动力更大
格隆汇5月8日丨光线传媒(300251)(300251 SZ)于2023年5月5日召开投资者交流会,就“最近不管是国内还是国外
-
新达控股(08471.HK)一季度收益约1380万元 同比减少约20.2%
格隆汇5月4日丨新达控股(08471 HK)公告,截至2023年3月31日止三个月,集团录得未经审核收益约人民币13 8百
-
全球信息:“平平无奇”的迈瑞
“平平无奇”的迈瑞,李西廷,美敦力,迈瑞医疗,医疗器械
-
郑州高中“三模”、中招“二模”明天开启,助力考生适应大考节奏
河南新闻广播
-
环球观察:武汉“红色物业”助力楼宇经济发展
武汉“红色物业”助力楼宇经济发展---湖北日报讯(通讯员姚茜)“减免租金对于我们这些中小微企业来说,...
-
消息!初级会计全天刷题直播 速来免费领取考前冲刺秘籍~
初级会计考试将于5月13-17日进行,考试时间近在咫尺,在最后的这些天里,大家一定要保持好心态,学会抓重点
-
长跑七年毛戈平再启IPO,“换头大师”流量还在吗? | IPO棱镜 世界观热点
《投资时报》研究员卓逸依赖创始人个人ldquo魅力rdquo进而发展公司品牌的案例并不少见在化妆品领域国货ldqu
-
天天观焦点:主板纺织企业排名股(主板纺织公司排名)
主板纺织企业排名股(主板纺织公司排名),主板纺织股有福能股份、常山北明、九牧王、桐昆股份、深纺织A、轻
-
科大讯飞涨停
科大讯飞涨停
-
怎么找高中的卷子照片不到才能到阶段资料哪里
1、怎么找高中的卷子照片不可以。中考试卷,在考生考试结束之后,选择题会通过机器进行阅卷。而书写的部分
-
沪银主力低点回升看涨|微动态
今日周一(5月8日)亚盘时段,沪银主力目前交投于5770元 千克一线上方,今日开盘于5770元 千克,截至发稿,沪
-
无锡水蜜桃季节是几月份
无锡水蜜桃季节是几月份5-8月份,点击查看水蜜桃成熟时间表图源:摄图网ID:501643397阳山水蜜桃无锡阳山水
-
恒昌医药裙带亲属低价入股涉利益输送 三年投8.17亿销售费多次卖劣质产品被罚
专注于医药下沉市场,湖南恒昌医药集团股份有限公司(以下简称“恒昌医药”)闯出了一条与普通医药流通...
-
以科技特派员制度助力“新农人”培育_精选
科技特派员制度是一项旨在解决乡村人才和科技瓶颈的重大举措。当前科技特派员制度正由技术指导向全产业链支
-
速读:小度将发布手机产品
北京商报讯(记者魏蔚)5月8日,小度相关人士向北京商报记者确认,小度将进军手机市场,并于5月下旬发布旗
-
A股市场常态化退市渐成新趋势
2023年5月8日,根据最新数据,目前已有20多家上市公司“锁定”强制退市,今年以来的强制退市公司将超过3...
-
劳动创造幸福生活 天元小学开展劳动技能竞赛
为培养学生正确的劳动价值观和良好的劳动品质,天元小学于2023年5月4日至5月5日开展了为期两天的劳动技能竞
-
全球观焦点:女子误喝4瓶“财富”
茅台,是当下最具知名度的纯粮佳酿,该酒的历史十分悠久,酒质口感已登峰造极,而且它还是曾经的国宴用酒。
-
农业银行传世之宝金条价格今天多少一克(2023年05月08日)|报道
金投网提供农业银行传世之宝金条价格今天多少一克(2023年05月08日),农业银行传世之宝金条价格最新消息(
X 关闭
X 关闭