1.js數據類型
①原始數據類型:
Undefined,Null,Boolean,Number,String
②引用數據類型:
對象,數組,函數
2.數據存儲的位置
①原始數據類型:
棧內存 原始數據類型直接存儲在棧(stack)中的簡單數據段,占據空間小、大小比較穩定,屬於被頻繁使用數據,所以放入棧中存儲;
②引用數據類型:
堆內存 引用數據類型存儲在堆(heap)中的對象,占據空間大、大小不固定 在棧內存中只是存了一個地址來表示對堆內存中的引用。
堆內存是無序存儲,可以根據引用直接獲取。
當解釋器尋找引用值時,會首先檢索其在棧中的地址,取得地址后從堆中獲得實體。
所以,JavaScript中對引用數據類型的操作都是操作對象的引用而不是實際的對象。
可以理解為,棧內存中保存了一個地址,這個地址和堆內存中的實際值是相關聯的。
3.關於復制
①引用數據類型
引用(基本)數據類型進行復制時,系統會自動為新的變量在棧內存中分配一個新的內存區域。
②引用數據類型
引用數據類型進行復制時,系統也會自動為新的變量在棧內存中分配一個值,但這個值僅僅是一個地址。也就是說,復制出來的變量和原有的變量具有相同的地址值,指向堆內存中的同一個對象。
如: var copyObj = obj, obj 和 copyObj 具有相同的地址值,指向堆內存中的同一個實際對象。
當修改 obj 或 copyObj 任意一個值時都會引起實際對象的值被修改。