javascript深拷贝的情况有哪些

发布时间:2022-01-12 20:16:50 作者:iii
来源:亿速云 阅读:120

这篇“javascript深拷贝的情况有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“javascript深拷贝的情况有哪些”文章吧。

深拷贝:引用数据类型中名存在栈内存中,值存在于堆内存中,但是栈内存会提供一个引用的地址指向堆内存中的值,深拷贝就是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存。方法一:使用Object.assign(),一般用于数据类型比较简单,层数不大于1的数据;因为Object.assign无法深层拷贝。

const strJson = {
      id:'12343231',
      name:'张三',
      age:23,
      inof:{
        sex:'男'
      },
      sjid:null,
      strHandle () {
        console.log('111111111');
      }
    }
    obj.name = 'lisi'
    obj.inof.sex = '女'
    console.log('obj',obj);
    console.log('strJson',strJson);

结果:

javascript深拷贝的情况有哪些

方法二:使用JSON.parse和JSON.stringify,一般用于数据类型比较复杂的,有深层嵌套的数据;但是undefined , function, RegExp 等类型无法处理;

const strJson = {
      id:'12343231',
      name:'张三',
      age:23,
      inof:{
        sex:'男'
      },
      sjid:null,
      strHandle () {
        console.log('111111111');
      }
    }
    const obj = JSON.parse(JSON.stringify(strJson))
    obj.name = 'lisi'
    obj.inof.sex = '女'
    console.log('obj',obj);
    console.log('strJson',strJson);

结果:

javascript深拷贝的情况有哪些

第三种:使用递归拷贝,在代码中处理特殊的情况。

 function copyHandle (strJson) {
      let result ;
      // 判断是否存在
      if (!strJson) return null;
      // 判断是否是对象
      if (typeof strJson !== 'object') return strJson;
      // 判断是否是数组
      if (Array.isArray(strJson)) {
        result = [];
        for (let i of strJson) {
          result.push(copyHandle(i))
        }
      }//判断是否是RegExp
      else if(strJson.constructor===RegExp) {
        result = strJson
      }//判断是否是对象
      else {
        result = {}
        for (let i in  strJson) {
          result[i] = copyHandle(strJson[i])
        }
      }
      // 返回结果
      return result
    }

以上就是关于“javascript深拷贝的情况有哪些”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

推荐阅读:
  1. javaScript自带的深拷贝
  2. Javascript深拷贝和浅拷贝有什么区别?

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

javascript

上一篇:基于Jenkins+Maven+Gitea+Nexus怎么搭建CICD环境

下一篇:HetuEngine怎么实现On Yarn原理

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》