最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年10月19日 16:06:02   作者:daixiangcn  
JavaScript中數(shù)組的方法種類眾多,在ES3-ES7不同版本時(shí)期都有新方法;并且數(shù)組的方法還有原型方法和從object繼承的方法,本文介紹了JavaScript數(shù)組及非數(shù)組對(duì)象的深淺克隆,希望讀者能從中有所收獲

什么是淺克隆、深克隆

淺克?。褐苯訉⒋鎯?chǔ)在棧中的值賦值給對(duì)應(yīng)變量,如果是基本數(shù)據(jù)類型,則直接賦值對(duì)應(yīng)的值,如果是引用類型,則賦值的是地址。
深克?。簩?shù)據(jù)賦值給對(duì)應(yīng)的變量,從而產(chǎn)生一個(gè)與源數(shù)據(jù)不相干的新數(shù)據(jù)(數(shù)據(jù)地址已變化)。即對(duì)象各個(gè)層級(jí)的屬性。
JavaScript中基本數(shù)據(jù)類型使用符號(hào)“=”可以進(jìn)行克隆,引用數(shù)據(jù)類型使用符號(hào)“=”只是改變了變量的指向,并沒有進(jìn)行真正的克隆操作。

1.對(duì)數(shù)組進(jìn)行克隆

1.1 淺克隆

使用for循環(huán)進(jì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 深克隆

使用遞歸進(jìn)行深克隆。

function deepClone(o) {
	var result = [];
	for (var i = 0; i < o.length; i++) {
		result.push(deepClone(o[i]));
	}
	return result;
}

2.對(duì)非數(shù)組對(duì)象進(jìn)行克隆

2.1 淺克隆

使用for循環(huán)進(jìn)行淺克隆。

var obj1 = { a: 1, b: 2, c: 3, d: [4, 5, { e: 'demo' }] };
var obj2 = {};
// 對(duì)象的淺克隆
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 深克隆

使用遞歸進(jìn)行深克隆。

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ù)組,是對(duì)象
        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ù)組對(duì)象的深淺克隆詳解原理的文章就介紹到這了,更多相關(guān)JavaScript 數(shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

栾川县| 奇台县| 沽源县| 股票| 普安县| 宾川县| 天祝| 汨罗市| 河北区| 如东县| 沁源县| 涟水县| 盐池县| 宜兰县| 沙田区| 常宁市| 义马市| 高碑店市| 丹东市| 砀山县| 宁武县| 新和县| 永修县| 大兴区| 龙井市| 松桃| 阳东县| 乌拉特前旗| 大丰市| 黄石市| 光泽县| 舞阳县| 垫江县| 申扎县| 澳门| 都匀市| 庆安县| 昌乐县| 新兴县| 渑池县| 祁门县|