缺点: 无法拷贝函数和undefined值。 无法正确处理特殊对象类型(如Date、RegExp等)。 可能造成数字精度损失。 无法处理循环引用。 丢失原型链上的方法和属性。 适用场景: 仅适用于处理简单的纯数据对象。 在性能开销和数据完整性要求不高的场景下可以使用。 对于需要深拷贝复杂对象或处理特殊数据类型的场景,建议使用更...
1.循环引用问题: 当对象之间存在循环引用关系时(一个对象的属性引用了另一个对象,而后者又反过来引用了前者),这种方法会失败,因为 JSON.stringify() 在遇到循环引用时会抛出错误。 2.不支持函数和undefined: JSON.stringify() 会忽略对象中的函数和 undefined 值,因此通过这种方式深拷贝的对象将丢失这些数据。 3....
首先我们来看下代码: 代码语言:javascript 复制 letdeepClone=function(obj){returnJSON.parse(JSON.stringify(obj))}leta={name:'Ken',age:18,hobbit:['dance','sing',{type:'sports',value:'run'}],schoolData:{grades:'A',},run:function(){},walk:undefined,fly:NaN,cy:null}letb=deepClone(a)cons...
1 如果obj里有函数,undefined,则序列化的结果会把函数, undefined丢失。 2 如果obj里面存在时间对象,JSON.parse(JSON.stringify(obj))之后,时间对象变成了字符串。 3 如果对象中存在循环引用的情况也无法正确实现深拷贝。 4 如果obj里有NaN、Infinity和-Infinity,则序列化的结果会变成null。 5 如果obj里有RegExp、...
一个数组添加属性,深拷贝之后添加的数据丢失 当数组添加一个对象,这个对象是不可枚举属性,使用JSON进行深拷贝,会丢失这个属性 使用JSON.parse(JSON.stringify())进行深拷贝 有哪些弊端 如果obj里有函数,undefined,则序列化的结果会把函数, undefined丢失
JSON.parse(JSON.stringify(obj))我们一般用来深拷贝,其过程说白了 就是利用JSON.stringify 将js对象序列化(JSON字符串),再使用JSON.parse来反序列化(还原)js对象;序列化的作用是存储(对象本身存储的只是一个地址映射,如果断电,对象将不复存在,因此需将对象的内容转换成字符串的形式再保存在磁盘上 )和传输(例如...
JSON.parse,JSON.stringify 深浅拷贝的缺陷经常使用 JSON.parse, JSON.stringify 的小伙伴都知道,他们两个可以用于深拷贝对象,但是可能会不太注意一些缺陷,是又一次我使用他们去深拷贝对象,我发现有些属性莫…
首先,让我们通过一个简单的示例来了解可能的缺陷。假设我们有一个自定义对象,包含一些属性和方法。当我们尝试使用JSON.stringify将此对象序列化为JSON字符串,然后使用JSON.parse将JSON字符串反序列化回JavaScript对象时,虽然表面上看起来对象的结构得以保留,但实际上某些属性可能并未正确复制。这可能是由于...
JSON.stringify() 方法将一个 JavaScript 值(对象或者数组)转换为一个 JSON 字符串,如果指定了 replacer 是一个函数,则可以选择性地替换值,或者如果指定了 replacer 是一个数组,则可选择性地仅包含数组指定的属性。 前言 项目中遇到一个 bug,一个组件为了保留一份 JSON 对象,使用 JSON.stringify 将其转换成...
JSON.stringify() 是一个非常常用的函数,但它也有一些局限性,并存在一些使用技巧可以帮助我们更好地使用它。 局限性: 无法序列化所有类型的数据: JSON.stringify() 无法处理一些 JavaScript 数据类型,例如: 函数: 会被忽略或转换为 null。 Symbol: