JSON.stringify和JSON.parse 优缺点 实现深拷贝的优缺点

野性酷女 2023-01-02 02:20 185阅读 0赞

项目中json缺点的运用 SON.parse(JSON.stringify()) 的利用 动态style封装

优点
方便,将字符串parse后创建新对象(新地址)

  1. let temp = JSON.parse(JSON.stringify(OBJ))

缺点
1.如果这个对象里属性是function

  1. let obj = {
  2. fun: function name(params) {
  3. }
  4. }
  5. console.log(obj);// { fun: [Function: name] }
  6. let temp = JSON.parse(JSON.stringify(obj))
  7. console.log(temp);// {}

如果被拷贝的对象中某个属性的值为undefined,则拷贝之后该属性会丢失

  1. let obj = {
  2. // fun: function name(params) {
  3. // }
  4. name:undefined
  5. }
  6. console.log(obj);// { name: undefined }
  7. let temp = JSON.parse(JSON.stringify(obj))
  8. console.log(temp);// {}

如果被拷贝的对象中有正则表达式,则拷贝之后的对象正则表达式会变成Object

  1. let obj = {
  2. // fun: function name(params) {
  3. // }
  4. name:/abc/
  5. }
  6. console.log(obj);// { name: /abc/ }
  7. let temp = JSON.parse(JSON.stringify(obj))
  8. console.log(temp);// {}

数组中对象也是一样的

  1. let obj = [{ name: undefined }]
  2. console.log(obj);// [ { name: undefined } ]
  3. let temp = JSON.parse(JSON.stringify(obj))
  4. console.log(temp);// [ {} ]

在转字符串的时候已经没有了

  1. let obj = [{ name: undefined,test:'name' }]
  2. console.log(JSON.stringify(obj));// [{"test":"name"}]

其他补充
性能差根据网上的数据大概比遍历慢几倍 数据

无法实现对函数 、RegExp等特殊对象的克隆

会抛弃对象的constructor,所有的构造函数会指向Object

对象有循环引用,会报错

含有symbol属性名的对象拷贝会漏掉symbol属性

其他弊端 弊端


为了以防万一最好用第三方库的deepCopy之类的

发表评论

表情:
评论列表 (有 0 条评论,185人围观)

还没有评论,来说两句吧...

相关阅读

    相关 js实现数组浅拷贝拷贝

    如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力。 此篇