千家信息网

javascript深拷贝的情况有哪些

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇"javascript深拷贝的情况有哪些"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看
千家信息网最后更新 2025年01月19日javascript深拷贝的情况有哪些

这篇"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);

结果:

方法二:使用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);

结果:

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

 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深拷贝的情况有哪些"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

0