亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript數(shù)組及非數(shù)組對象的深淺克隆詳解原理

 更新時間:2021年10月19日 16:06:02   作者:daixiangcn  
JavaScript中數(shù)組的方法種類眾多,在ES3-ES7不同版本時期都有新方法;并且數(shù)組的方法還有原型方法和從object繼承的方法,本文介紹了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使用說明

    javascript Array.prototype.slice使用說明

    slice 可以用來獲取數(shù)組片段,它返回新數(shù)組,不會修改原數(shù)組。
    2010-10-10
  • javascript斷點調(diào)試心得分享

    javascript斷點調(diào)試心得分享

    javascript中程序是怎么可以中斷執(zhí)行,然后一步一步走下去。而且debug的時候,可以看到變量,調(diào)用棧等東西。這個是如何實現(xiàn)的?
    2016-04-04
  • layer關(guān)閉當(dāng)前窗口頁面以及確認取消按鈕的方法

    layer關(guān)閉當(dāng)前窗口頁面以及確認取消按鈕的方法

    今天小編就為大家分享一篇layer關(guān)閉當(dāng)前窗口頁面以及確認取消按鈕的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • JavaScript彈出對話框的三種方式

    JavaScript彈出對話框的三種方式

    本文主要介紹了javascript中的三種彈出對話框,分別是alert()方法,confirm()方法,prompt()方法,對javascript彈出對話框相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2016-03-03
  • js實現(xiàn)右鍵彈出自定義菜單

    js實現(xiàn)右鍵彈出自定義菜單

    這篇文章主要為大家詳細介紹了js實現(xiàn)右鍵彈出自定義菜單,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • 使用JS操作文件(FileReader讀取--node的fs)

    使用JS操作文件(FileReader讀取--node的fs)

    這篇文章主要介紹了使用JS操作文件(FileReader讀取--node的fs),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • JavaScript判斷是否為數(shù)字的幾種方式匯總(推薦!)

    JavaScript判斷是否為數(shù)字的幾種方式匯總(推薦!)

    有時候需要根據(jù)輸入的內(nèi)容來進行計算,這個時候就需要判斷輸入的內(nèi)容是否是數(shù)字,下面這篇文章主要給大家介紹了關(guān)于JavaScript判斷是否為數(shù)字的幾種方式,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • JavaScript中的常見繼承總結(jié)

    JavaScript中的常見繼承總結(jié)

    這篇文章主要介紹了JavaScript中的常見繼承總結(jié),繼承其實就是構(gòu)造函數(shù)和構(gòu)造函數(shù)之間的一種關(guān)系,更多相關(guān)介紹,需要的小伙伴可以參考下面文章內(nèi)容
    2022-09-09
  • 分享5個JavaScript的寫法小技巧

    分享5個JavaScript的寫法小技巧

    寫代碼的時候總有一些東西是會重復(fù)出現(xiàn)的,次數(shù)多了你就會想找找捷徑了,下面這篇文章主要給大家介紹了關(guān)于5個JavaScript的寫法小技巧,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-02-02
  • 拖動層效果,兼容IE和FF!

    拖動層效果,兼容IE和FF!

    拖動層效果,兼容IE和FF!...
    2006-11-11

最新評論