首頁 > web前端 > js教程 > 關於js中基本資料型別、引用資料型別區別

關於js中基本資料型別、引用資料型別區別

一个新手
發布: 2017-10-24 09:20:08
原創
1595 人瀏覽過

堆疊(stack)和堆疊(heap)
  stack為自動分配的內存空間,它由系統自動釋放;而heap則是動態分配的內存,大小不定也不會自動釋放。 

基本型別與參考型別

基本型別:存放在堆疊記憶體中的簡單資料段,資料大小決定,記憶體空間大小可以分配。

基本資料類型有Undefined、Null、Boolean、Number 和String,他們的值是直接存放在堆疊中;

引用類型:存放在堆記憶體中的物件的值,由位址指標與值組成,位址保存在堆疊中,實際的值保存在堆中,堆中的每個空間大小不一樣,根據情況進行特定的分配。當我們需要存取參考型別(如對象,數組,函數等)的值時,首先從棧中獲得該對象的地址指針,然後再從堆內存中取得所需的數據; 


 var s='str',t= 0,floatNum=1.1;
    var obj={
        a:10,
        b:'Joel',
        c:function(){
            console.log('function');
        }
    }
登入後複製

 js 基本数据类型引用数据类型内存分配

如上圖所示:

基本資料類型值是保存在堆疊中,引用類型的物件參考是保存在堆疊中,值是保存在堆中;

總結

聲明變數時不同的記憶體分配: 

基本類型:儲存在堆疊(stack)中的簡單資料段,它們的值直接儲存在變數存取的位置。這是因為基本類型佔據的空間是固定的,所以可將他們儲存在較小的記憶體區域 – 堆疊中,這樣儲存便於迅速查詢變數的值。

引用類型:儲存在堆疊(heap)中的對象,儲存在堆疊中的值是一個指針(point)用於指向儲存對象的記憶體位址,這是因為引用類型值的大小會改變,所以不能把它放在堆疊中,否則會降低變數查尋的速度。相反存在堆疊中的值是該物件位址而位址的大小是固定的,所以把它儲存在堆疊中對變數效能無任何影響。

不同的記憶體分配機制也帶來了不同的存取機制

在javascript中是不允許直接存取保存在堆記憶體中的物件的,所以在存取一個物件時,首先訪問記憶體堆疊得到這個物件在記憶體堆中的位址,然後再按照這個位址去獲得這個物件中的值,這就是傳說中的按引用訪問,而基本型別的值則是直接記憶體棧中。

複製變數時的不同

基本類型:在將一個保存著原始值的變數複製給另一個變數時,會將原始值的副本賦值給新變量,此後這兩個變數是完全獨立的,他們只是擁有相同的value而已。

引用類型:在將一個保存著物件記憶體位址的變數複製給另一個變數時,會把這個記憶體位址賦值給新變量,也就是說這兩個變數都指向了堆記憶體中的同一個對象,他們中任何一個人所做的改變都會反映在另一個身上。 (這裡要理解的一點就是,複製對象時並不會在堆內存中新生成一個一模一樣的對象,只是多了一個保存指向這個對象指針的變量)多了一個指針。

參數傳遞的不同(把實參複製給形參的過程) 

ECMAScript中所有函數的參數都是按值來傳遞的,但是為什麼涉及到原始類型與引用類型的值時仍然有差別呢?還不就是因為記憶體分配時的差別。  
基本資料型態:只是把變數裡的值複製一個副本然後傳遞給參數,之後參數和這個變數互不影響。
引用型別:因為它傳遞的值是記憶體位址,所以都是指向同一個物件;

以上是關於js中基本資料型別、引用資料型別區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板