13 JavaScript中的簡(jiǎn)單數(shù)據(jù)類型與復(fù)雜數(shù)據(jù)類型

技術(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等);

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é)友
    

7.資料下載

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容