摘要:回顧一下我們總結(jié)的常用的深拷貝完整方案實現(xiàn)一個函數(shù),可以對中的種主要的數(shù)據(jù)類型包括進行值復制對數(shù)組深拷貝的簡單方法總結(jié)循環(huán)實現(xiàn)數(shù)組的深拷貝只適應單層數(shù)組結(jié)構(gòu)方法實現(xiàn)數(shù)組的深拷貝只適應單層數(shù)組結(jié)構(gòu)方法實現(xiàn)數(shù)組的深拷貝只適應單層數(shù)組結(jié)構(gòu)擴展
回顧一下我們總結(jié)的常用的深拷貝完整方案
實現(xiàn)一個函數(shù)clone,可以對JavaScript中的5種主要的數(shù)據(jù)類型(包括Number、String、Object、Array、Boolean)進行值復制
function clone(obj){ var result; switch(typeof obj){ case "undefined": break; case "string": result = obj+""; break; case "number": result = obj-0; break; case "boolean": result =obj; break; case "object": if(obj ===null){ result = null; } else { if(Object.prototype.toString.call(obj).slice(8,-1)==="Array"){ result=[]; for(var i=0;i對數(shù)組深拷貝的簡單方法總結(jié) for 循環(huán)實現(xiàn)數(shù)組的深拷貝
var arr = [1,2,3,4,5];//只適應單層數(shù)組結(jié)構(gòu) var arr2 = copyArr(arr) function copyArr(arr) { let res = [] for (let i = 0; i < arr.length; i++) { res.push(arr[i]) } return res }slice 方法實現(xiàn)數(shù)組的深拷貝
var arr = [1,2,3,4,5] //只適應單層數(shù)組結(jié)構(gòu) var arr2 = arr.slice(0) console.log(arr) //(5) [1, 2, 5, 4, 5] console.log(arr2) //(5) [1, 2, 5, 4, 5]concat 方法實現(xiàn)數(shù)組的深拷貝
var arr = [1,2,3,4,5] //只適應單層數(shù)組結(jié)構(gòu) var arr2 = arr.concat() console.log(arr) //(5) [1, 2, 5, 4, 5] console.log(arr2) //(5) [1, 2, 5, 4, 5]ES6擴展運算符實現(xiàn)數(shù)組的深拷貝
var arr = [1,2,3,4,5] //只適應單層數(shù)組結(jié)構(gòu) var [ ...arr2 ] = arr console.log(arr) //(5) [1, 2, 5, 4, 5] console.log(arr2) //(5) [1, 2, 5, 4, 5]對象的深拷貝的簡單方法總結(jié)for循環(huán)實現(xiàn)對象的深拷貝
//如果包含屬性值是數(shù)組,無法深層拷貝數(shù)組里面的數(shù)據(jù) var obj = { name: "jingjing", sex: "girl", old: "18" } var obj2 = copyObj(obj) function copyObj(obj) { let res = {} for (var key in obj) { res[key] = obj[key] } return res }轉(zhuǎn)換成json再轉(zhuǎn)換成對象實現(xiàn)對象的深拷貝(對象里面不包含函數(shù)的情況下使用,注意這種直接粗暴的方法只能拷貝json格式數(shù)據(jù)對象,函數(shù)會丟失)
var obj = { name: jingjing", sex: "girl", old: "18" } var obj2 = JSON.parse(JSON.stringify(obj))擴展運算符實現(xiàn)對象的深拷貝(隨著es6的逐漸推廣,此招兒推薦使用)
//如果包含的屬性值是數(shù)組,無法深層拷貝數(shù)組里面的數(shù)據(jù) var obj = { name: "jingjing", sex: "girl", old: "18" } var { ...obj2 } = obj obj.old = "22" console.log(obj) //{name: "jingjing", sex: "girl", old: "22"} console.log(obj2) //{name: "jingjing", sex: "girl", old: "18"}項目中常用到的深拷貝方法大概先總結(jié)到這里,有些es6的方法用起來實在是簡潔,高效
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/89996.html
摘要:中具有兩種數(shù)據(jù)類型的值,分別是基本類型值和引用類型值。在中,基本類型值指的是簡單的數(shù)據(jù)段,引用類型值指那些可能由多個值構(gòu)成的對象?;緮?shù)據(jù)類型基本數(shù)據(jù)類型未定義的值的默認值尚未存在的對象數(shù)字字符串。 整理以及總結(jié)一下,回溯下基礎(chǔ)。 ECMAScript中具有兩種數(shù)據(jù)類型的值,分別是 基本類型值和引用類型值。 在ECMAScript中,基本類型值指的是簡單的數(shù)據(jù)段,引用類型值指那些可能由...
摘要:基本數(shù)據(jù)類型將變量和值一起放在棧內(nèi)存引用數(shù)據(jù)類型則將變量放在棧內(nèi)存而將值放在堆內(nèi)存。該怎么理解沒圖我說個假設(shè)有個變量在內(nèi)存中是這樣的棧內(nèi)存中的變量指向堆內(nèi)存中一塊內(nèi)存相當于持有該內(nèi)存的指針,而那塊內(nèi)存中存儲變量的相關(guān)內(nèi)容。 趁著周五沒那么忙,抽個空整理一下最近使用比較頻繁的一個小技術(shù) 對象的深復制。感覺啊,這個標題和今天的節(jié)日(假裝不知道原來是情人節(jié))那么遙相呼應。啊,沒有女朋友?沒有...
摘要:什么是深拷貝淺拷貝見名知義,無論是深拷貝還是淺拷貝,都是的問題。使用如下以上就是關(guān)于中的深拷貝與淺拷貝的知識和如何進行深拷貝的知識了,如果有錯或者有其他方式的話,歡迎在下面留言評論啦 前言 最近在寫項目的時候涉及到一些父子組件傳遞個對象或者數(shù)組通信啥的,或者是直接復制添加對象啥的,直接使用賦值的時候總會出錯。一查原來是淺拷貝的問題,就從網(wǎng)上找了點資料,匯總到這里來了。 1 什么是深拷貝...
摘要:對于深拷貝,淺拷貝的概念不多說,概念可以自行百度喲這里對深拷貝對象進行一些研究只有值類型數(shù)據(jù)的深拷貝針對只有值的數(shù)據(jù)對象,下面一行代碼足以不嚴謹?shù)暮唵蔚纳羁截愖⒁膺@里問題存在沒有對參數(shù)做檢驗判斷是否對象的邏輯不夠嚴謹沒有考慮數(shù)組的兼容進階深 對于深拷貝,淺拷貝的概念不多說,概念可以自行百度喲!這里對深拷貝對象進行一些研究! 只有值類型數(shù)據(jù)的深拷貝 針對只有值的數(shù)據(jù)對象,下面一行代碼足以...
閱讀 3413·2021-10-11 11:06
閱讀 2194·2019-08-29 11:10
閱讀 1956·2019-08-26 18:18
閱讀 3262·2019-08-26 13:34
閱讀 1568·2019-08-23 16:45
閱讀 1046·2019-08-23 16:29
閱讀 2807·2019-08-23 13:11
閱讀 3237·2019-08-23 12:58