摘要:最近在研究對象的深拷貝,下面是我試驗的兩種方法,一種是通過和的方法實現(xiàn)的深拷貝,一種是通過遞歸函數(shù)實現(xiàn)的深拷貝。
最近在研究js對象的深拷貝,下面是我試驗的兩種方法,一種是通過JSON.stringify和JSON.parse的方法實現(xiàn)的深拷貝,一種是通過遞歸函數(shù)實現(xiàn)的深拷貝。
此處有個問題,第二種方法實現(xiàn)了對象方法的拷貝,但是不是深拷貝,網(wǎng)上找了很久都沒有找到實現(xiàn)對象的方法深拷貝的方法,希望有大神能給點建議。
let obj = { a: 1, b: "2", c: { c1: 1 }, d: function () { console.log("d"); }, e: [1, 2, 3] }; //使用JSON.parse和JSON.stringify的方法是深拷貝,除了function,其他的都能拷貝 let obj_copy1 = JSON.parse(JSON.stringify(obj)); console.log(obj_copy1); console.log(obj.c === obj_copy1.c); //結果是false,對象是深拷貝 // 使用遞歸的方法復制,function可以復制,除了function是淺拷貝,其他的都是深拷貝 function clone(obj) { let new_obj = {}; for(let key in obj) { let t = ( typeof obj[key] ).toLowerCase(); if (t === "object") { if(obj[key] instanceof Array) { var new_arr = []; for(let item of obj[key]) { new_arr.push(item); } new_obj[key] = new_arr; } else { new_obj[key] = clone(obj[key]); } } else { new_obj[key] = obj[key]; } } return new_obj; } let obj_copy2 = clone(obj); console.log(obj_copy2); console.log(obj.c === obj_copy2.c); //結果是false,對象是深拷貝 console.log(obj.d === obj_copy2.d); //結果是true,function不是深拷貝
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/101317.html
摘要:引子前不久我建立的技術群里一位問了一個這樣的問題,她貼出的代碼如下所示執(zhí)行結果如下所示第一個第二個這是一個令人詫異的結果,為什么第一個彈出框顯示的是,而不是呢這種疑惑的原理我描述如下一個頁面里直接定義在標簽下的變量是全局變量即屬于對象的變量 1) 引子 前不久我建立的技術群里一位MM問了一個這樣的問題,她貼出的代碼如下所示: var a = 1; function hehe...
摘要:大家想想怎么做什么是匿名函數(shù)自執(zhí)行并如何在實際庫中應用匿名函數(shù)自執(zhí)行,注意,注意,只有這個名字和沒有其它名字,比如封閉空間,這個是為了讓大家好理解自己造的詞語。 通過本節(jié)課你將學到: 1.什么是函數(shù)表達式和函數(shù)聲明 2.first-class function 3.引用和復制的區(qū)別 4.函數(shù)傳參是怎么回事兒 5.關于函數(shù)的this和arguments 6.什么是匿名函數(shù)自執(zhí)行并如何在...
摘要:一棧數(shù)據(jù)結構與不同,中并沒有嚴格意義上區(qū)分棧內(nèi)存與堆內(nèi)存。引用數(shù)據(jù)類型的值是保存在堆內(nèi)存中的對象。不允許直接訪問堆內(nèi)存中的位置,因此我們不能直接操作對象的堆內(nèi)存空間。為了更好的搞懂變量對象與堆內(nèi)存,我們可以結合以下例子與圖解進行理解。 showImg(https://segmentfault.com/img/remote/1460000009784102?w=1240&h=683); ...
摘要:棧內(nèi)存與堆內(nèi)存簡單類型的值,它們的值直接存儲在變量訪問的位置,這是因為這些簡單類型占據(jù)的空間是固定的,所以可將他們存儲在較小的內(nèi)存區(qū)域棧中。 看到一個這樣的問題 function setName(obj) { obj.name = Tom; obj = new Object(); obj.name = Greg ; } var person = new Object();...
摘要:棧內(nèi)存與堆內(nèi)存簡單類型的值,它們的值直接存儲在變量訪問的位置,這是因為這些簡單類型占據(jù)的空間是固定的,所以可將他們存儲在較小的內(nèi)存區(qū)域棧中。 看到一個這樣的問題 function setName(obj) { obj.name = Tom; obj = new Object(); obj.name = Greg ; } var person = new Object();...
閱讀 672·2021-10-09 09:41
閱讀 655·2019-08-30 15:53
閱讀 1082·2019-08-30 15:53
閱讀 1217·2019-08-30 11:01
閱讀 1575·2019-08-29 17:31
閱讀 994·2019-08-29 14:05
閱讀 1722·2019-08-29 12:49
閱讀 417·2019-08-28 18:17