存儲(chǔ)與拷貝

數(shù)據(jù)類型

基本數(shù)據(jù)類型

  • Number
  • String
  • Boolean
  • Undefined
  • Null

引用類型

多個(gè)基本數(shù)據(jù)類型復(fù)合形成饼拍。

  • Object

存儲(chǔ)方式

基本數(shù)據(jù)類型的存儲(chǔ)方式

  • 每當(dāng)定義一個(gè)基本數(shù)據(jù)類型的變量,會(huì)在 棧區(qū) 開(kāi)辟一個(gè)內(nèi)存空間跪帝,用于存放該變量。棧區(qū)的特點(diǎn)是:靜態(tài)分配锨并,大小固定膀估。
  • 當(dāng)一個(gè)變量通過(guò)直接復(fù)制的方式復(fù)制給另一個(gè)變量,系統(tǒng)會(huì)在 棧區(qū) 重新開(kāi)辟一個(gè)內(nèi)存空間荞怒;兩個(gè)變量互不影響。
let num1 = 10;
let num2 = num1;
num2 = 20;
console.log(num1);     // 10 

引用類型的存儲(chǔ)方式

  • 每當(dāng)定義一個(gè)引用類型秧秉,如:對(duì)象褐桌,會(huì)在 堆區(qū) 開(kāi)辟一個(gè)內(nèi)存空間;然后如果創(chuàng)建一個(gè)該對(duì)象的實(shí)例象迎,會(huì)在 棧區(qū) 開(kāi)辟一個(gè)內(nèi)存存放該實(shí)例荧嵌,該實(shí)例實(shí)際上是一個(gè)指向 堆內(nèi)存 對(duì)象的指針呛踊。堆區(qū)的特點(diǎn)是:動(dòng)態(tài)分配,大小不固定啦撮。
  • 當(dāng)一個(gè)實(shí)例直接復(fù)制給另一個(gè)實(shí)例谭网,系統(tǒng)會(huì)在 棧區(qū) 重新開(kāi)辟一個(gè)內(nèi)存空間,但是新實(shí)例同樣也是一個(gè)指向 堆內(nèi)存 對(duì)象的指針赃春,所以愉择,這樣的操作,這樣的修改都會(huì)對(duì)新舊實(shí)例產(chǎn)生影響织中。
let obj1 = {
    name: 'zero',
    age: 22,
    num: ['1', '2', '3']
}

//直接復(fù)制
let obj2 = obj1;

obj2.name = 'Ertsul';
obj2.num[0] = '一';
console.log(obj1, obj2);
// name:"Ertsul"
// age:22
// num:["一", "2", "3"]

淺拷貝和深拷貝

區(qū)別

兩者的區(qū)別主要在于 復(fù)制層次 的不同:

  • 淺拷貝主要復(fù)制到對(duì)象屬性這一層次锥涕,如果對(duì)象里面有子對(duì)象,則無(wú)法對(duì)子對(duì)象完成復(fù)制狭吼;之后對(duì)于子對(duì)象的修改 會(huì) 影響到原復(fù)制對(duì)象层坠。
  • 深拷貝則是淺拷貝的 加強(qiáng)版 ,可以實(shí)現(xiàn)對(duì)于子對(duì)象的拷貝刁笙;之后對(duì)于子對(duì)象的修改 不會(huì) 影響到原復(fù)制對(duì)象破花。主要實(shí)現(xiàn)方法有:
    • 遞歸
    • JSON解析

淺拷貝

// 淺拷貝
function shallowCopy(source) {
    let result = {};
    for(let key in source){
        result[key] = source[key]
    }
    return result;
}
let obj1 = {
    name: 'zero',
    age: 22,
    num: ['1', '2', '3']
}

let obj2 = {};
obj2 = shallowCopy(obj1);

obj2.name = 'Ertsul';    // 不會(huì)產(chǎn)生影響
obj2.num[0] = '一';      // 產(chǎn)生影響
console.log("obj1", obj1);
console.log("obj2", obj2);

結(jié)果如圖:

image.png

深拷貝

遞歸
// 遞歸實(shí)現(xiàn)深拷貝
function deepCopy(source, res){
    var res = res || {};
    for(let i in source){
        if(typeof source[i] === 'object'){
            if(source[i].constructor === Array){
                res[i] = []
            }else {
                res[i] = {}
            }
            deepCopy(source[i], res[i]);   // 遞歸子對(duì)象屬性
        }else{
            res[i] = source[i]
        }
    }
    return res;
}

let obj1 = {
    name: 'zero',
    age: 22,
    num: ['1', '2', '3']
}

let result = {}
result = deepCopy(obj1, result);
result.name = 'Ertsul';
result.num[1] = '二';
console.log("result", result);
console.log("obj1", obj1);

結(jié)果如圖:

image.png
JSON解析
// JSON實(shí)現(xiàn)深拷貝
let obj1 = {
    name: 'zero',
    age: 22,
    num: ['1', '2', '3']
}
let result1 = JSON.parse(JSON.stringify(obj1));
result1.num[2] = '三';
console.log('result1', result1);
console.log('obj1', obj1);

結(jié)果如圖:


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市疲吸,隨后出現(xiàn)的幾起案子座每,更是在濱河造成了極大的恐慌,老刑警劉巖磅氨,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尺栖,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡烦租,警方通過(guò)查閱死者的電腦和手機(jī)延赌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)叉橱,“玉大人挫以,你說(shuō)我怎么就攤上這事∏宰#” “怎么了掐松?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)粪小。 經(jīng)常有香客問(wèn)我大磺,道長(zhǎng),這世上最難降的妖魔是什么探膊? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任杠愧,我火速辦了婚禮,結(jié)果婚禮上逞壁,老公的妹妹穿的比我還像新娘流济。我一直安慰自己锐锣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布绳瘟。 她就那樣靜靜地躺著雕憔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪糖声。 梳的紋絲不亂的頭發(fā)上斤彼,一...
    開(kāi)封第一講書(shū)人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音姨丈,去河邊找鬼畅卓。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蟋恬,可吹牛的內(nèi)容都是我干的翁潘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼歼争,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼拜马!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起沐绒,我...
    開(kāi)封第一講書(shū)人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤俩莽,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后乔遮,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體扮超,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年蹋肮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了出刷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡坯辩,死狀恐怖馁龟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情漆魔,我是刑警寧澤坷檩,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站改抡,受9級(jí)特大地震影響矢炼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜阿纤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一裸删、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧阵赠,春花似錦涯塔、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至枷邪,卻和暖如春榛搔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背东揣。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工践惑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嘶卧。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓尔觉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親芥吟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子侦铜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容