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