ES之值類型以及堆和棧
ES的數據類型:
原始類型(值存在棧內存中): Number、String Boolean、undefined、null
charAt(index)返回該index所在的字節,charCodeAt(index)返回該index所在字節的Unicode值。
undefined和null不能和數字進行比較。
引用類型(值存在堆內存中): Object、Function、Array、Date、Math、RegExp ...
______________________________________________________________________________________
堆(heap)和棧(stack)
棧內存:
將棧當做一棟房子,房子裏面有很多房間,此時的房間名為系統定義的二進制數字,
當聲明一個變量(變量聲明永遠在棧中,與賦的值無關)時棧為它分配一個房間,房間名為變量名,
當未賦值時,房間裏面系統默認放undefined,當變量賦原始類型值時,房間內放該原始值,
當變量賦引用類型時,房間內放置該引用值在堆中的地址。
棧的特性:先進去的東西後出來,後進去的東西先出來。
堆內存:
堆內存也可以看做一個房子,堆內存的房間放的是引用類型的值的集合,而指向該房間的地址存放在棧內存的房間裏。
原始值具有不可改變的特性:
比如將一個原始值放在一個房間裏時,該值就不能再取出來了,
除非棧內存滿了,它的值就會被新的值覆蓋,這種方式稱為形成二次覆蓋。
若棧內存沒滿,當一個變量再次賦值時,該變量就會脫離原來的房間,去占據下一個房間,並把新賦的值放進去。
舊值的房間名就再次變成了棧內存的一串標準數字。
棧內存中賦值屬於拷貝: 拷貝的是一個原始值或引用地址。
ES之值類型以及堆和棧