JavaScript——簡單數據類型和複雜數據類型(包括:簡單類型與複雜類型的概述、堆和棧、簡單類型與複雜類型的內存分配以及簡單類型與複雜類型的傳參)

簡單類型與複雜類型

  • 簡單類型有叫做基本數據類型或值類型;複雜類型又叫做引用類型。

  • 值類型:簡單數據類型/基本數據類型,在存儲時變量中存儲的是值本身,,因此叫做值類型。

    如:string、number、boolean、undefined、null。

    null其實是一個空對象,注意用途有:(1)銷燬變量;(2)如果某個變量以後打算存儲爲對象,但暫時沒有想好放什麼值,就可以先給該變量賦值null,讓它等於一個空對象。

  • 引用類型:複雜數據類型,在存儲時變量中存儲的僅僅是地址(引用),因此叫做引用數據類型。

    通過new關鍵字創建的對象(系統對象、自定義對象),如:Object、Array、Date等。

堆和棧

  • 棧(操作系統):由操作系統自動分配釋放存放函數等參數值、局部變量的值等。(簡單數據類型存放到棧裏面)

  • 堆(操作系統):存儲複雜類型(對象),一般由程序員分配釋放,若程序員不釋放,則由垃圾回收機制回收。(複雜數據類型存放到堆)

注意:JavaScript中其實是沒有堆和棧的概念,這裏只是通過堆和棧的方式,達到更容易理解代碼執行方式的目的。

簡單類型的內存分配

  • 值類型變量的數據直接存放在變量(棧空間)中。

複雜類型的內存分配

  • 引用類型變量(棧空間)裏存放的是地址,真正的對象實例是存放在堆空間中。

簡單類型傳參

  • 函數的形參可以看作是一個變量,當我們把一個值類型變量作爲參數傳給函數的形參時,其實是把變量在棧空間裏的值複製了一份給形參,那麼在方法內部對形參做任何修改,都不會影響到外部變量。
function fn(a){
  a++;
  console.log(a);
}
var x = 10;
fn(x);
console.log(x);		//運行結果爲:11	10

複雜類型傳參

  • 函數參數可以看作是一個變量,當我們把引用類型變量傳給形參時,其實是把變量在棧空間裏保存的堆地址複製給了形參,形參和實參其實保存的是同一個堆地址,使用操作的是同一個對象。
function Person(name){
  this,name = name;
}
function f1(x){
  console.log(x.name);	//輸出結果:henry
  x.name = 'andy';
  console.log(x.name);		//輸出結果:andy
}
var p new Person("henry");
console.log(p.name);	//輸出結果:henry
f1(p);
console.log(p.name);	//輸出結果:andy

微信公衆號也會定期更新,覺得文章寫得還可以的,可以加個關注!點個贊!謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章