module2-04-簡單型別和復據型別的儲存
阿新 • • 發佈:2020-12-06
一、簡單型別和複雜型別的區別
-
基本型別又叫值型別,複雜型別又叫引用型別
-
值型別:簡單資料型別,基本資料型別,在儲存時,變數中儲存的是值本身,因此叫做值型別
-
引用型別:複雜資料型別,在儲存時,變數中儲存的僅僅是地址(引用)
-
JS中沒有堆和棧的概念,但是可以用這個來講解
-
-
簡單的資料就會儲存到棧(複雜型別的引用也會在這裡)
-
複雜型別的資料就會儲存到堆(需要人工銷燬,現在js有自己的垃圾清除機制)
-
-
棧(作業系統):有作業系統自動分配釋放,存放函式的引數值,區域性變數等
-
堆(作業系統):儲存複雜型別(物件),一般有程式設計師分配釋放,若程式設計師不釋放,由辣雞回收機制回收
二、基本型別在記憶體中的儲存
-
變數中儲存的是值本身,如果將變數賦值給另一個變數,是將內部的值賦值一份給另外一個變數,兩個變數沒有聯絡,其中一個變化,另外一個不會發生變化
-
兩個空間是獨立開的,當講number賦值給n,其實是將值賦值過去(前提number儲存的是簡單變數),其中是沒有聯絡的
三、複雜型別在記憶體中的儲存
-
如果講複雜型別的資料賦值給一個變數,複雜型別的資料會在記憶體中建立一個原型,而變數中儲存的是指向物件的一個地址。如果講變數賦值給另外一個變數,相當於將地址複製一份給了新的變數,兩個變數的地址相同,指向的是同一個原型,其中一個訪問並改變了,另一個變數也會改變
var p1 = { name: 'zs', age: 18 }
p2 = p1
p2.age = 20
p1 // { name: 'zs', age: 20 }
p2 // { name: 'zs', age: 20 }