最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

深拷貝和淺拷貝

2022-10-21 14:59 作者:對(duì)白淺淺  | 我要投稿


// a = 基礎(chǔ)數(shù)據(jù)類(lèi)型 或 復(fù)雜數(shù)據(jù)類(lèi)型

// b = a


// 基本數(shù)據(jù)類(lèi)型 ?在賦值的時(shí)候值拷貝

// 復(fù)雜數(shù)據(jù)類(lèi)型 ?棧內(nèi)存中存地址,堆內(nèi)存中存真實(shí)的值,賦值后兩個(gè)變量指向同一塊內(nèi)存空間(或者說(shuō)只復(fù)制了指向某個(gè)對(duì)象的指針) ?修改被賦值的變量,原始變量也會(huì)跟著改變


// 深拷貝

// 1.Objecet.assign()

// 可以對(duì)非嵌套對(duì)象進(jìn)行深拷貝的方法,如果對(duì)象中出現(xiàn)嵌套情況,那么其他被嵌套對(duì)象的行為就成了普通的淺拷貝。


// 2.JSON.stringify()/JSON.parse()

// 對(duì)于 undefined、任意的函數(shù)以及 symbol 三個(gè)特殊的值分別作為對(duì)象屬性的值、數(shù)組元素、單獨(dú)的值時(shí) JSON.stringify()將返回不同的結(jié)果。

const data = {

? ? a: "aaa",

? ? b: undefined,

? ? c: Symbol("dd"),

? ? fn: function() {

? ? ? ? return true;

? ? }

? ?

};

? ?

JSON.stringify(data); // 輸出: "{"a":"aaa"}"


// 假設(shè) undefined、任意的函數(shù)以及 symbol 值作為數(shù)組元素會(huì)是怎樣呢

JSON.stringify(["aaa", undefined, function aa() {


? ? return true

? ?

}, Symbol('dd')]) // 輸出:"["aaa",null,null,null]"


// 單獨(dú)序列化這些值會(huì)是什么樣的結(jié)果呢

JSON.stringify(function a (){console.log('a')})

// undefined


JSON.stringify(undefined)

// undefined


JSON.stringify(Symbol('dd'))

// undefined


// 3.用遞歸的方式進(jìn)行深拷貝 ? (對(duì)象深拷貝)

function deepClone(dest,src){ ? ? ?//dest為目標(biāo)對(duì)象 ?src為源對(duì)象

? ? var dest=dest||{}

? ? for(var key in src){

? ? ? ? if(typeof src[key]==="object"){ ? ?//typeof[] 和 typeof{} 結(jié)果都是objct

? ? ? ? ? ? //如果對(duì)象的屬性又是對(duì)象

? ? ? ? ? ? dest[key]=(src[key].constructor===Array)?[]:{}

? ? ? ? ? ? deepClone(dest[key],src[key])

? ? ? ? }else{

? ? ? ? ? ? dest[key]=src[key]

? ? ? ? }

? ? }

? ? return dest

}

var a={

? ? name:"Bob",

? ? age:16,

? ? parents:{

? ? ? ? father:"Jack",

? ? ? ? mother:"Marry"

? ? }

}

var b=deepClone({},a)

console.log(a)

console.log(b)

// 4.引入函數(shù)庫(kù) lodash,該函數(shù)庫(kù)也有提供 _.cloneDeep()

var _ = require('lodash');

var obj1 = {

?a: 1,

?b: { f: { g: 1 } },

?c: [1, 2, 3]

};

var obj2 = _.cloneDeep(obj1);

console.log(obj1.b.f === obj2.b.f);


// 淺拷貝

// 1.Objecet.assign()

// 可以對(duì)非嵌套對(duì)象進(jìn)行深拷貝的方法,如果對(duì)象中出現(xiàn)嵌套情況,那么其他被嵌套對(duì)象的行為就成了普通的淺拷貝。

// 2.Array.concat() //數(shù)組連接

// 3.Array.slice() ?//數(shù)組切片



深拷貝和淺拷貝的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
邹平县| 双牌县| 肇庆市| 乐清市| 巫溪县| 阿拉尔市| 云安县| 辰溪县| 西盟| 双辽市| 皋兰县| 宜良县| 响水县| 个旧市| 东明县| 龙州县| 丹阳市| 沙坪坝区| 玉屏| 普宁市| 泗洪县| 武强县| 略阳县| 泸西县| 东宁县| 永嘉县| 汕头市| 阳山县| 名山县| 屏山县| 辽宁省| 秭归县| 泸水县| 筠连县| 呼图壁县| 志丹县| 永新县| 林甸县| 咸阳市| 平原县| 深水埗区|