JSON.par(JSON.stringify())实现深拷贝时有什么缺点

更新时间:2023-06-09 10:44:22 阅读: 评论:0

JSON.par(JSON.stringify())实现深拷贝时有什么缺点JSON.par(JSON.stringify ())在实现深拷贝时是有⼀些弊端的。
有以下⼏种情况时,不能正确的进⾏深拷贝:
1、obj⾥⾯有new Date(),深拷贝后,时间会变成字符串的形式。⽽不是时间对象;
var a ={
name:'a',
date:[new Date(1536627600000),new Date(1540047600000)],
};
let b;
b =JSON.par(JSON.stringify(a))
console.log(a,b)
2、obj⾥有RegExp、Error对象,则序列化的结果会变成空对象{};
功夫梦歌曲
const a ={
name:'a',
morality是什么意思date:new RegExp('\\w+'),
};
// debugger
const b =JSON.par(JSON.stringify(a));
a.name ='test'
console.log( a, b)
3、obj⾥有function,undefined,则序列化的结果会把function或 undefined丢失;
const a ={
name:'a',
date:function hehe(){
console.log('fff')
},
};
// debugger
const b =JSON.par(JSON.stringify(a));
a.name ='test'
console.log(a, b)
4、obj⾥有NaN、Infinity和-Infinity,则序列化的结果会变成null;
const a ={
name:'a',
date:NaN,
};
// debugger
const b =JSON.par(JSON.stringify(a));
a.name ='test'nevertheless用法
console.log(a, b)
5、JSON.stringify()只能序列化对象的可枚举的⾃有属性,如果obj中的对象是由构造函数⽣成的实例对象, 深拷贝后,会丢弃对象的constructor;
function Person(name){
this.name=name;
}实战经验
var person =new Person('jyy')
const a ={
name:'a',
date: person,
};
// debugger
英文版传奇
const b =JSON.par(JSON.stringify(a));
a.name ='test'
console.log(a, b)
6、如果对象中存在循环引⽤的情况也⽆法正确实现深拷贝;那么, 以上的6种情况怎么实现深拷贝呢?看下⾯的代码:
//实现深拷贝函数
function deepClone(data){
const type =this.judgeType(data);
let obj =null;
if(type =='array'){
obj =[];
for(let i =0; i < data.length; i++){
obj.push(this.deepClone(data[i]));
}
}el if(type =='object'){
obj ={}
for(let key in data){
if(data.hasOwnProperty(key)){
obj[key]=this.deepClone(data[key]);
}
mortgage}
}el{
return data;
}
return obj;
}
function judgeType(obj){
xe是什么意思
// tostring会返回对应不同的标签的构造函数
const toString = String;
const map ={
'[object Boolean]':'boolean',
'[object Number]':'number',
'[object String]':'string',
'[object Function]':'function',
'[object Array]':'array',
'[object Date]':'date',
'[object RegExp]':'regExp',
'[object Undefined]':'undefined',
'[object Null]':'null',
'[object Object]':'object',
};
if(obj instanceof Element){
return'element';
}
return map[toString.call(obj)];
怎么读}
杰里 布朗const test ={
name:'a',
date:[1,2,3]
};
console.log(deepClone(test))
test.date[0]=6;
怎样画生活妆console.log(test);

本文发布于:2023-06-09 10:44:22,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/910544.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:拷贝   对象   变成   序列化   实现
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图