技術(shù)交流QQ群:1027579432,歡迎你的加入!
歡迎關(guān)注我的微信公眾號(hào):CurryCoder的程序人生
1.簡(jiǎn)單數(shù)據(jù)類型與復(fù)雜數(shù)據(jù)類型
- 簡(jiǎn)單數(shù)據(jù)類型也稱為基本數(shù)據(jù)類型或者值類型,復(fù)雜數(shù)據(jù)類型也稱為引用類型。
-
值類型:簡(jiǎn)單數(shù)據(jù)類型或者基本數(shù)據(jù)類型,在存儲(chǔ)時(shí)變量中存儲(chǔ)的是值本身。因此,也叫作值類型。string、number、boolean、undefined、null;
// 簡(jiǎn)單數(shù)據(jù)類型null,返回的是一個(gè)空的對(duì)象 var timer = null; console.log(typeof timer); // object對(duì)象 // null應(yīng)用場(chǎng)景:如果有變量以后打算存儲(chǔ)為對(duì)象,暫時(shí)沒(méi)想好放啥,這時(shí)候就給null - 引用類型:復(fù)雜數(shù)據(jù)類型,在存儲(chǔ)時(shí)變量中存儲(chǔ)的僅僅是地址(引用),因此叫做引用數(shù)據(jù)類型。通過(guò)new關(guān)鍵字創(chuàng)建的對(duì)象(系統(tǒng)對(duì)象、自定義對(duì)象,如Object、Array、Date等);
-
值類型:簡(jiǎn)單數(shù)據(jù)類型或者基本數(shù)據(jù)類型,在存儲(chǔ)時(shí)變量中存儲(chǔ)的是值本身。因此,也叫作值類型。string、number、boolean、undefined、null;
2.堆和棧

堆和棧空間.png
- 堆和??臻g分配的區(qū)別:
- 棧(操作系統(tǒng)):由操作系統(tǒng)自動(dòng)分配釋放函數(shù)的參數(shù)值、局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。簡(jiǎn)單數(shù)據(jù)類型存放在棧中。
- 堆(操作系統(tǒng)):存儲(chǔ)復(fù)雜類型(對(duì)象),一般由程序員分配釋放,。如果程序員不釋放,則由垃圾回收機(jī)制回收。復(fù)雜數(shù)據(jù)類型存放在堆中。
- JavaScript中沒(méi)有堆和棧的概念,通過(guò)堆棧的方式,更容易理解代碼的一些執(zhí)行方式。
3.簡(jiǎn)單類型的內(nèi)存分配
- 值類型(簡(jiǎn)單數(shù)據(jù)類型):string、number、boolean、undefined、null;
-
值類型變量的數(shù)據(jù)直接存放在變量(??臻g)中;
簡(jiǎn)單數(shù)據(jù)類型的內(nèi)存分配.png
4.復(fù)雜數(shù)據(jù)類型的內(nèi)存分配
- 引用類型(復(fù)雜數(shù)據(jù)類型):通過(guò)new關(guān)鍵字創(chuàng)建的對(duì)象(系統(tǒng)對(duì)象、自定義對(duì)象),如Object、Array、Date等;
-
引用類型變量(??臻g)中存放的是地址,真正的對(duì)象實(shí)例存放在堆空間中。即首先在棧中存放地址(十六進(jìn)制表示),然后這個(gè)地址指向堆中的數(shù)據(jù)。
復(fù)雜數(shù)據(jù)類型的內(nèi)存分配.png
簡(jiǎn)單數(shù)據(jù)類型與復(fù)雜數(shù)據(jù)類型的內(nèi)存分配.png
5.簡(jiǎn)單數(shù)據(jù)類型傳參
-
函數(shù)的形參也可以看成是一個(gè)變量,當(dāng)我們把一個(gè)值類型變量作為參數(shù)傳遞給函數(shù)形參時(shí),其實(shí)是把變量在??臻g中的值復(fù)制了一份傳給形參,因此在方法內(nèi)部對(duì)形參做任何修改,都不會(huì)影響到外部變量;
簡(jiǎn)單數(shù)據(jù)類型傳參.png// 簡(jiǎn)單數(shù)據(jù)類型傳參 function fn(a) { a++; console.log(a); } var x = 10; fn(x); console.log(x);
6.復(fù)雜數(shù)據(jù)類型傳參
-
函數(shù)的形參也可以看成是一個(gè)變量,當(dāng)我們把引用類型變量傳遞給形參時(shí),其實(shí)是把變量在??臻g中保存的堆地址復(fù)制給了形參,形參和實(shí)參其實(shí)保存的是同一個(gè)堆地址,所以操作的是同一個(gè)對(duì)象。
復(fù)雜數(shù)據(jù)類型的傳參.png// 復(fù)雜數(shù)據(jù)類型傳參 function Person(name) { this.name = name; } function f1(x) { console.log(x.name); // 劉德華 x.name = '張學(xué)友'; console.log(x.name); // 張學(xué)友 } var p = new Person('劉德華'); console.log(p.name); // 劉德華 f1(p); console.log(p.name); // 張學(xué)友




