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

歡迎光臨散文網(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ó)家法律
凌海市| 九江县| 丹棱县| 民勤县| 汕头市| 长垣县| 获嘉县| 延边| 绥德县| 临猗县| 安达市| 玉门市| 岑巩县| 西昌市| 三穗县| 安福县| 建阳市| 资中县| 广南县| 北海市| 嘉义县| 桂林市| 思茅市| 达日县| 集贤县| 宜都市| 屯门区| 阳江市| 东乡县| 静乐县| 五峰| 新津县| 瑞昌市| 长治县| 克东县| 门头沟区| 姜堰市| 泰州市| 濮阳市| 乐都县| 衡阳市|