JavaScript中的基本數(shù)據(jù)類型和引用數(shù)據(jù)類型

## 大連科技

自己整理的,不一定正確,思路也比較亂!歡迎指正!

先講清楚幾個概念!

變量:變量是一個名字。它綁定了一塊內(nèi)存(堆內(nèi)存)!

變量值:存儲在變量那塊內(nèi)存中的數(shù)據(jù)!數(shù)據(jù)基本可以分為兩種,基本數(shù)據(jù)類型和引用數(shù)據(jù)類型。(函數(shù)也相當(dāng)于一組變量和變量值(鍵值對),函數(shù)名就是一個變量。而變量值是那個函數(shù)的地址引用)

對象:不能被變量直接綁定,而是要通過引用來間接綁定的數(shù)據(jù)就是對象(函數(shù)也是對象,"萬物皆對象")。而且對象數(shù)據(jù)與非變量數(shù)據(jù)相比有一個特點,即它是有內(nèi)部結(jié)構(gòu)的,即屬性。

1、變量—>數(shù)據(jù)
2、變量—>數(shù)據(jù)(地址)—>數(shù)據(jù)(對象、函數(shù))

總結(jié)一下就是:變量是一個名字,它綁定一塊存儲空間,這個空間要么放數(shù)據(jù),要么放數(shù)據(jù)的地址(或者某種引用)

基礎(chǔ)數(shù)據(jù)類型(undefined、null、boolean、number、string)都是按值訪問的。按值訪問相當(dāng)于將變量中的數(shù)據(jù)進行一次拷貝,給新的變量,原變量改變后,按值訪問的不會變化!

把a賦值給b后,a改變,b不隨著改變


引用數(shù)據(jù)類型(對象、函數(shù)是按引用訪問的!引用數(shù)據(jù)類型存儲在變量中的值是保存在堆內(nèi)存中的對象的地址。JS不允許直接訪問堆內(nèi)存中的對象?因此我們不能直接操作對象的堆內(nèi)存空間。在操作對象時,實際上是在操作對象的引用而不是實際的對象。

簡單說就是:變量綁定的那塊內(nèi)存里放的數(shù)據(jù),并不是我真正想要的數(shù)據(jù),它是一個元數(shù)據(jù)、一個地址,一個指向我真正想用的數(shù)據(jù)的位置的指針。

當(dāng)我們要訪問堆內(nèi)存中的引用數(shù)據(jù)類型時,實際上我們首先是從變量中獲取了該對象的地址引用(指針),然后再從堆內(nèi)存中取得我們需要的數(shù)據(jù)!

下面這個例子,b 等于的是 a 對象的引用,而不是把整個 a 對象復(fù)制給 b, 因此b a 指向的是同一個對象,所以b改動了對象的值,a指向的對象的值也改變了!

另外一個例子

當(dāng)對象被當(dāng)參數(shù)傳遞時,傳的是該對象的地址引用?。榱俗C明對象是按值傳遞的!傳遞!傳遞!不是訪問!引用類型按引用訪問,按值傳遞! 基本數(shù)據(jù)類型則都是按值傳遞和按值訪問?。?/p>

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

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

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