您好,登錄后才能下訂單哦!
這篇文章主要講解了“如何理解JavaScript數組及非數組對象的深淺克隆原理”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何理解JavaScript數組及非數組對象的深淺克隆原理”吧!
淺克隆:直接將存儲在棧中的值賦值給對應變量,如果是基本數據類型,則直接賦值對應的值,如果是引用類型,則賦值的是地址。
深克隆:將數據賦值給對應的變量,從而產生一個與源數據不相干的新數據(數據地址已變化)。即對象各個層級的屬性。
JavaScript中基本數據類型使用符號“=”可以進行克隆,引用數據類型使用符號“=”只是改變了變量的指向,并沒有進行真正的克隆操作。
使用for循環進行淺克隆。
var arr1 = ['demo', 1, 2]; var arr2 = []; // 數組的淺克隆 for (var i = 0; i < arr1.length; i++) { arr2[i] = arr1[i]; } console.log(arr2); console.log(arr1 == arr2);
輸出結果:
Array(3)0: "demo"1: 12: 2length: 3[[Prototype]]: Array(0)
false
使用遞歸進行深克隆。
function deepClone(o) { var result = []; for (var i = 0; i < o.length; i++) { result.push(deepClone(o[i])); } return result; }
使用for循環進行淺克隆。
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);
輸出結果:
{a: 1, b: 2, c: 3, d: Array(3)}
false
使用遞歸進行深克隆。
function deepClone(o) { var result = {}; for (var i in o) { result[i] = deepClone(o[i]); } return result; }
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)) { // 是數組 var result = []; for (var i = 0; i < o.length; i++) { result.push(deepClone(o[i])); } } else if (typeof o == 'object') { // 非數組,是對象 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));
感謝各位的閱讀,以上就是“如何理解JavaScript數組及非數組對象的深淺克隆原理”的內容了,經過本文的學習后,相信大家對如何理解JavaScript數組及非數組對象的深淺克隆原理這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。