JSON.parse(JSON.stringify())是一种在JavaScript中常用的对象深拷贝方法,但其并非完美无缺,存在一些显著的缺点。下面是对其缺点的详细分析: 1. JSON.parse(JSON.stringify())的作用 JSON.parse(JSON.stringify(obj))的基本作用是将一个JavaScript对象obj转换成一个JSON字符串,然后再将这个字符串解析回一个JavaScript...
function deepClone(obj, hash = new WeakMap()) { if (obj instanceof RegExp || obj instanceof Date) return new obj.constructor(obj); if (obj instanceof Array) return obj.map(el => deepClone(el, hash); if (obj instanceof Object) { if (hash.has(obj)) return hash.get(obj); let...
let obj = {string: "字符串",Number: 10,null: null,undefined: undefined,date: new Date(),function: () => {console.log("我是一个函数");},RegExp: /^([0]{2}|0[1-9]|[1-9])\d*$/,};console.log("被拷贝的对象");console.log(obj);let objJSONclone = JSON.parse(JSON.stringif...
console.error('ddd', test, copyed) 4、如果obj里有NaN、Infinity和-Infinity,则序列化的结果会变成null 5、JSON.stringify()只能序列化对象的可枚举的自有属性,例如 如果obj中的对象是有构造函数生成的, 则使用JSON.parse(JSON.stringify(obj))深拷贝后,会丢弃对象的constructor; 1 2 3 4 5 6 7 8 9 10...
1 如果obj里有函数,undefined,则序列化的结果会把函数, undefined丢失。 2 如果obj里面存在时间对象,JSON.parse(JSON.stringify(obj))之后,时间对象变成了字符串。 3 如果对象中存在循环引用的情况也无法正确实现深拷贝。 4 如果obj里有NaN、Infinity和-Infinity,则序列化的结果会变成null。
一个数组添加属性,深拷贝之后添加的数据丢失 当数组添加一个对象,这个对象是不可枚举属性,使用JSON进行深拷贝,会丢失这个属性 使用JSON.parse(JSON.stringify())进行深拷贝 有哪些弊端 如果obj里有函数,undefined,则序列化的结果会把函数, undefined丢失
经常使用 JSON.parse, JSON.stringify 的小伙伴都知道,他们两个可以用于深拷贝对象,但是可能会不太注意一些缺陷,是又一次我使用他们去深拷贝对象,我发现有些属性莫名其妙的丢失了,之前没有太深究其弊端,今天趁着有空深究一下这些弊端。
let objCopy = JSON.parse(JSON.stringify(obj)); console.log('obj', obj); console.log('objCopy', objCopy); } 3.如果json里有 function,undefined,则序列化的结果会把 function,undefined 丢失; { let obj = { age: 18, fn: function () { ...
经常使用 JSON.parse, JSON.stringify 的小伙伴都知道,他们两个可以用于深拷贝对象,但是可能会不太注意一些缺陷,是又一次我使用他们去深拷贝对象,我发现有些属性莫名其妙的丢失了,之前没有太深究其弊端,今天趁着有空深究一下这些弊端。 首先我们来看下代码: let deepClone = function(obj) { return JSON.parse(...
使用JSON.parse(JSON.stringify(object))实现深拷贝局限 大部分情况我们都可以使用JSON.parse(JSON.stringify(object))来实现深拷贝,但该方法也有局限性,如下: 会忽略undefined 会忽略symbol 不能序列化函数 不能解决循环引用的对象 例如: let a ={ age: undefined, ...