Javascript 值類型和引用類型區(qū)別

Javascript中變量類型分為原始類型對象類型兩類:

值類型(原始類型)
字符串 string 、數(shù)值 number、布爾值 booleannull、undefined

引用類型(對象類型)
對象 Object、數(shù)組 Array、函數(shù) function。

區(qū)別

值類型

  • 占用空間固定,保存在棧中
    當(dāng)一個(gè)方法執(zhí)行時(shí),每個(gè)方法都會建立自己的內(nèi)存棧。
    在這個(gè)方法內(nèi)定義的變量將會逐個(gè)放入這塊棧內(nèi)存里,隨著方法執(zhí)行結(jié)束,這個(gè)方法的內(nèi)存棧也將自然銷毀。
    因此,所有在方法中定義的變量都是放在棧內(nèi)存中的;棧中存儲的是基礎(chǔ)變量以及一些對象的引用變量,基礎(chǔ)變量的值是存儲在棧中,而引用變量存儲在棧中的是指向堆中的數(shù)組或者對象的地址,這就是為何修改引用類型總會影響到其他指向這個(gè)地址的引用變量。
  • 值的變量賦值,保存與復(fù)制的是值的本身
  • 值類型無法添加屬性和方法
  • 使用typeof檢測數(shù)據(jù)類型
  • typeof 區(qū)分不出來引用類型(除了函數(shù))
  • 值類型的比較是指的比較
    注:==比較時(shí)會做類型轉(zhuǎn)換,是值的比較;===是值和類型的比較,只有值和類型同時(shí)相等時(shí),才能相等。

引用類型

  • 占用空間不固定,保存在堆中
    當(dāng)我們在程序中創(chuàng)建一個(gè)對象時(shí),這個(gè)對象將被保存到運(yùn)行時(shí)數(shù)據(jù)區(qū)中,以便反復(fù)利用(因?yàn)閷ο蟮膭?chuàng)建成本通常較大),這個(gè)運(yùn)行時(shí)數(shù)據(jù)區(qū)就是堆內(nèi)存。
    堆內(nèi)存中的對象不會隨方法的結(jié)束而銷毀,即使方法結(jié)束后,這個(gè)對象還可能被另一個(gè)引用變量所引用(方法的參數(shù)傳遞時(shí)很常見),則這個(gè)對象依然不會被銷毀,只有當(dāng)一個(gè)對象沒有任何引用變量引用它時(shí),系統(tǒng)的垃圾回收機(jī)制才會在核實(shí)的時(shí)候回收它。
  • 引用類型可以添加屬性和方法
  • 保存與復(fù)制的是指向?qū)ο蟮闹羔?/li>
  • 使用instanceof檢測數(shù)據(jù)類型
  • 引用類型的比較是引用地址的比較

參考: https://www.jb51.net/article/106581.htm

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

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

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