手机版

实现纯数据json对象深度克隆的一行代码

时间:2021-10-05 来源:互联网 编辑:宝哥软件园 浏览:

复制的代码如下:VAR DATABJCLONE=JSON。解析(JSON。Stringify (dataobj))这是昨晚在大成胖乎乎的微博上看到的,当时我很感兴趣,就标了。今天整理资料,分析为什么一句话就能实现纯数据json对象的深度克隆。1.Json.stringify函数复制代码如下:将JavaScript值转换为JavaScript对象符号(Json)字符串。JSON。Stringify (value [,replacer] [,space])参数值是必需的。要转换的JavaScript值(通常是对象或数组)。可选替代品。转换结果的函数或数组。如果replacer是一个函数,JSON.stringify调用该函数并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回undefined,则排除成员。根对象的键是空字符串:“”。如果替换器是数组,则只转换数组中具有键值的成员。成员的转换顺序与数组中的键相同。当value参数也是数组时,将忽略replacer数组。空间可选。在返回的JSON文本中添加缩进、空白和换行符,以便于阅读。如果省略空格,返回值文本将不会产生任何额外的空格。如果空格是一个数字,返回值文本将在每一级缩进指定数量的空格。如果空格大于10,文本将缩进10个空格。如果空格是非空字符串(例如,“\t”),则返回各级返回值文本的缩进字符串中的字符数。如果空格是长度超过10个字符的字符串,则使用前10个字符。返回包含JSON文本的字符串。从上面的介绍可以看出,这个函数将一个对象或数组转换成json字符串。2.Json.parse函数复制代码如下:将JavaScript对象符号(Json)字符串转换为对象。JSON.parse(text [,reviver])参数文本是必需的。有效的JSON字符串。Reviver是可选的。转换结果的函数。将为对象的每个成员调用该函数。如果成员包含嵌套对象,嵌套对象将在父对象之前转换。对于每个成员,会发生以下情况:如果reviver返回有效值,则成员值将被转换后的值替换。如果reviver返回与收到的值相同的值,则不会修改成员值。如果reviver返回null或未定义,则该成员将被删除。返回一个对象或数组。从上面的介绍可以看出,这个函数将一个json字符串转换成一个对象或数组。3.示例数组的克隆:复制代码的代码如下: var obj=[1,2,[3,4,5]];var objCloned=JSON . parse(JSON . stringify(obj));console . log(obj);console . log(JSON . stringify(obj));console . log(Objcloned);objCloned[0]=6;console . log(obj);console . log(Objcloned);实验结果:

从上面的结果,我们发现一个数组确实被深度克隆了。对象的克隆:复制代码如下: varobj={name:' Rey ',info : { location : ' Beijing ',age : ' 28 ' };var objCloned=JSON . parse(JSON . stringify(obj));console . log(obj);console . log(JSON . stringify(obj));console . log(Objcloned);console . log(JSON . stringify(Objcloned));objCloned.name='骆盘';console . log(obj);console . log(JSON . stringify(obj));console . log(Objcloned);console . log(JSON . stringify(Objcloned));实验结果:

从上面的实验中,我们发现这种方法也可以克隆对象。4.但以上所有实验都是针对纯数据的,也就是说,这种方法只对纯数据的数组或对象克隆有效。实验非纯数据:复制代码如下:varobj={name:' Rey ',info3360 {location:' Beijing ',age:' 28'},hello 3360 function(){ console . log(' hello world!'。);}};var objCloned=JSON . parse(JSON . stringify(obj));console . log(obj);console . log(JSON . stringify(obj));console . log(Objcloned);console . log(JSON . stringify(Objcloned));objCloned.name='骆盘';console . log(obj);console . log(JSON . stringify(obj));console . log(Objcloned);console . log(JSON . stringify(Objcloned));实验结果:

从以上实验结果可以看出,数据不纯的函数无法参与转换,被“轻视”。所以这种一句话的深度克隆方法只针对纯数据,这是开发中需要注意的一点。

版权声明:实现纯数据json对象深度克隆的一行代码是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。