javascript克隆對(duì)象深度介紹
更新時(shí)間:2012年11月20日 10:16:29 作者:
本文將詳細(xì)介紹js 深度克隆的分類與實(shí)現(xiàn),需要的朋友可以參考下
js一般有兩種不同數(shù)據(jù)類型的值:
基本類型(包括undefined,Null,boolean,String,Number),按值傳遞;
引用類型(包括數(shù)組,對(duì)象),按址傳遞,引用類型在值傳遞的時(shí)候是內(nèi)存中的地址。
克隆或者拷貝分為2種:
淺度克隆:基本類型為值傳遞,對(duì)象仍為引用傳遞。
深度克?。核性鼗?qū)傩跃耆寺?,并于原引用類型完全?dú)立,即,在后面修改對(duì)象的屬性的時(shí)候,原對(duì)象不會(huì)被修改。
function cloneObject(obj){
var o = obj.constructor === Array ? [] : {};
for(var i in obj){
if(obj.hasOwnProperty(i)){
o[i] = typeof obj[i] === "object" ? cloneObject(obj[i]) : obj[i];
}
}
return o;
}
另:如果是一個(gè)簡單的數(shù)組,元素中沒有引用類型的值,可以直接用array.concat();或者array.slice(0);來深度拷貝一個(gè)數(shù)組,這樣簡單又高效。數(shù)組的concat()和slice()本來就會(huì)生成一個(gè)新的數(shù)組,原來的數(shù)組不會(huì)受影響。但是要注意的是你要確保被拷貝的數(shù)組中元素中沒有引用類型的值。
這是另一種深度克隆的方法,很簡單,很實(shí)用:
var s = JSON.stringify( obj );
var o = JSON.parse( s );
基本類型(包括undefined,Null,boolean,String,Number),按值傳遞;
引用類型(包括數(shù)組,對(duì)象),按址傳遞,引用類型在值傳遞的時(shí)候是內(nèi)存中的地址。
克隆或者拷貝分為2種:
淺度克隆:基本類型為值傳遞,對(duì)象仍為引用傳遞。
深度克?。核性鼗?qū)傩跃耆寺?,并于原引用類型完全?dú)立,即,在后面修改對(duì)象的屬性的時(shí)候,原對(duì)象不會(huì)被修改。
復(fù)制代碼 代碼如下:
function cloneObject(obj){
var o = obj.constructor === Array ? [] : {};
for(var i in obj){
if(obj.hasOwnProperty(i)){
o[i] = typeof obj[i] === "object" ? cloneObject(obj[i]) : obj[i];
}
}
return o;
}
另:如果是一個(gè)簡單的數(shù)組,元素中沒有引用類型的值,可以直接用array.concat();或者array.slice(0);來深度拷貝一個(gè)數(shù)組,這樣簡單又高效。數(shù)組的concat()和slice()本來就會(huì)生成一個(gè)新的數(shù)組,原來的數(shù)組不會(huì)受影響。但是要注意的是你要確保被拷貝的數(shù)組中元素中沒有引用類型的值。
這是另一種深度克隆的方法,很簡單,很實(shí)用:
復(fù)制代碼 代碼如下:
var s = JSON.stringify( obj );
var o = JSON.parse( s );
相關(guān)文章
javascript學(xué)習(xí)筆記(二) 鼠標(biāo)經(jīng)過時(shí),改變div塊的背景色的代碼
javascript學(xué)習(xí)筆記(二) 鼠標(biāo)經(jīng)過時(shí),改變div塊的背景色的實(shí)現(xiàn)代碼,當(dāng)然也可以用css實(shí)現(xiàn)。2011-04-04JavaScript中使用Math.floor()方法對(duì)數(shù)字取整
這篇文章主要介紹了JavaScript中使用Math.floor()方法對(duì)數(shù)字取整,是JS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-06-06JavaScript學(xué)習(xí)筆記整理_setTimeout的應(yīng)用
下面小編就為大家?guī)硪黄狫avaScript學(xué)習(xí)筆記整理_setTimeout的應(yīng)用。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09JavaScript操作數(shù)組的常用方法總結(jié)
這篇文章總結(jié)了JavaScript操作數(shù)組的常用方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06關(guān)于什么是javascript模塊化以及為何使用模塊化開發(fā)
這篇文章主要介紹了關(guān)于什么是javascript模塊化以及為何使用模塊化開發(fā),模塊化是一種軟件開發(fā)的設(shè)計(jì)模式,它將一個(gè)大型的軟件系統(tǒng)劃分成多個(gè)獨(dú)立的模塊,每個(gè)模塊都有自己的功能和接口,需要的朋友可以參考下2023-04-04js鼠標(biāo)點(diǎn)擊事件在各個(gè)瀏覽器中的寫法及Event對(duì)象屬性介紹
各個(gè)主流瀏覽器德鼠標(biāo)點(diǎn)擊事件,方便使用時(shí)查詢,整理還算是很詳細(xì)吧,感興趣的你可以參考下啊,希望本文對(duì)你有所幫助2013-01-01JavaScript程序中實(shí)現(xiàn)繼承特性的方式總結(jié)
JavaScript是一門強(qiáng)行聲稱面向?qū)ο蟮恼Z言,而繼承是面向?qū)ο蟮囊淮笾饕匦?這里我們根據(jù)阮一峰老師的文章來看一下JavaScript程序中實(shí)現(xiàn)繼承特性的方式總結(jié)2016-06-06