js的深拷貝和淺拷貝

淺拷貝

值類型數(shù)據(jù)保存在內(nèi)存棧中,引用類型保存在內(nèi)存堆中.淺拷貝是拷貝引用類型的指針,對于里面的具體數(shù)值沒有拷貝.
1.直接給對象賦值

var a = {
  name:'Park',
  age:25
}

2.解構(gòu)對象

var foo ={
  name:'Park',
  }
var bar ={
  age:25
}
var park = {...foo,...bar}

深拷貝

當拷貝來的對象不再只是原對象的一個指針,而是每個屬性確確實實存在棧內(nèi)存中,則為深拷貝了
1.JSON對象實現(xiàn)深拷貝
核心思路是把JSON轉(zhuǎn)成字符串存入棧內(nèi)存,再將字符串轉(zhuǎn)為對象
注意:如果對象中包含方法則會被忽略.

function (obj){
   var obj = JSON.stringify(obj)
    return JSON.parse(obj)
}

Object.assign(target,source)
注意:第一層對象為深拷貝,第二層對象開始就是淺拷貝了

var foo ={
  name:'Park',
  }
var bar ={
  age:25
}
Object.assign(foo,bar)
  //foo  {name: "Park", age: 25}

3.遞歸實現(xiàn)深拷貝

function deepCopy(obj){
  var newobj = null
  if (typeof(obj) =='object'&&obj!==null){
    newobj = obj instanceof Array? []:{}
    for(var i in obj){
        newobj[i] = copy(obj[i])
      }
  }else{
    newobj = obj
  }
  return newobj
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 淺拷貝 重新再堆中創(chuàng)建內(nèi)存,拷貝前后對象的基本數(shù)據(jù)類型互不影響 只拷貝一層,不能對對象中的子對象進行拷貝 深拷貝 ...
    kiterumer閱讀 358評論 0 0
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,658評論 1 32
  • 一、JS的基本數(shù)據(jù)類型 基本數(shù)據(jù)類型:String,Boolean,Number,Undefined,Null; ...
    puxiaotaoc閱讀 34,069評論 9 95
  • 寫在前面 各類技術(shù)論壇關(guān)于深拷貝的博客有很多,有些寫的也比我好,那為什么我還要堅持寫這篇博客呢,之前看到的一篇博客...
    心_c2a2閱讀 21,494評論 3 18
  • 全世界只有不到3%的人微信搜索并且關(guān)注了 簫凌 你真是個特別的人 策劃:簫凌「from Overture Stud...
    簫凌閱讀 235評論 0 0

友情鏈接更多精彩內(nèi)容