JavaScript數(shù)組及非數(shù)組對象的深淺克隆詳解原理
什么是淺克隆、深克隆
淺克?。褐苯訉⒋鎯υ跅V械闹蒂x值給對應(yīng)變量,如果是基本數(shù)據(jù)類型,則直接賦值對應(yīng)的值,如果是引用類型,則賦值的是地址。
深克?。簩?shù)據(jù)賦值給對應(yīng)的變量,從而產(chǎn)生一個與源數(shù)據(jù)不相干的新數(shù)據(jù)(數(shù)據(jù)地址已變化)。即對象各個層級的屬性。
JavaScript中基本數(shù)據(jù)類型使用符號“=”可以進行克隆,引用數(shù)據(jù)類型使用符號“=”只是改變了變量的指向,并沒有進行真正的克隆操作。
1.對數(shù)組進行克隆
1.1 淺克隆
使用for循環(huán)進行淺克隆。
var arr1 = ['demo', 1, 2]; var arr2 = []; // 數(shù)組的淺克隆 for (var i = 0; i < arr1.length; i++) { arr2[i] = arr1[i]; } console.log(arr2); console.log(arr1 == arr2);
輸出結(jié)果:
Array(3)0: "demo"1: 12: 2length: 3[[Prototype]]: Array(0)
false
1.2 深克隆
使用遞歸進行深克隆。
function deepClone(o) { var result = []; for (var i = 0; i < o.length; i++) { result.push(deepClone(o[i])); } return result; }
2.對非數(shù)組對象進行克隆
2.1 淺克隆
使用for循環(huán)進行淺克隆。
var obj1 = { a: 1, b: 2, c: 3, d: [4, 5, { e: 'demo' }] }; var obj2 = {}; // 對象的淺克隆 for (var i in obj1) { obj2[i] = obj1[i]; } console.log(obj2); console.log(obj1 == obj2);
輸出結(jié)果:
{a: 1, b: 2, c: 3, d: Array(3)}
false
2.2 深克隆
使用遞歸進行深克隆。
function deepClone(o) { var result = {}; for (var i in o) { result[i] = deepClone(o[i]); } return result; }
3.整合深克隆函數(shù)
var obj1 = { a: 1, b: 2, c: 3, d: [4, 5, { e: 'demo' }] }; var arr1 = ['demo', 1, 2]; // 深克隆 function deepClone(o) { if (Array.isArray(o)) { // 是數(shù)組 var result = []; for (var i = 0; i < o.length; i++) { result.push(deepClone(o[i])); } } else if (typeof o == 'object') { // 非數(shù)組,是對象 var result = {}; for (var i in o) { result[i] = deepClone(o[i]); } } else { // 基本類型值 var result = o; } return result; } console.log(deepClone(arr1)); console.log(deepClone(obj1));
到此這篇關(guān)于JavaScript數(shù)組及非數(shù)組對象的深淺克隆詳解原理的文章就介紹到這了,更多相關(guān)JavaScript 數(shù)組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javascript Array.prototype.slice使用說明
slice 可以用來獲取數(shù)組片段,它返回新數(shù)組,不會修改原數(shù)組。2010-10-10layer關(guān)閉當(dāng)前窗口頁面以及確認取消按鈕的方法
今天小編就為大家分享一篇layer關(guān)閉當(dāng)前窗口頁面以及確認取消按鈕的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09使用JS操作文件(FileReader讀取--node的fs)
這篇文章主要介紹了使用JS操作文件(FileReader讀取--node的fs),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12JavaScript判斷是否為數(shù)字的幾種方式匯總(推薦!)
有時候需要根據(jù)輸入的內(nèi)容來進行計算,這個時候就需要判斷輸入的內(nèi)容是否是數(shù)字,下面這篇文章主要給大家介紹了關(guān)于JavaScript判斷是否為數(shù)字的幾種方式,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-06-06