JS中的類型只有6種,其中基本數據類型有5種分別爲string,number,boolen,null,undefined,引用類型有一種,就是object,object是一個大的綜合體,在JS中除了那5個基本數據類型之外,其餘的一切皆對象。
var a = 100; var b = a; a++ console.log(a)//101 console.log(b)//100
var obj1 = new object(); var obj2 = new object(); obj1.age = 18; obj2 = obj1; obj1.age++ console.log(obj1.age)//19 console.log(obj2.age)//19
能夠看到上面兩個例子都是改變了值,基本數據類型是被賦值的不會變,而引用的是被賦值的也會隨之發生改變,那麼這是爲何呢?其實很簡單,一句話就能夠歸納:由於基本數據類型保存的是值,而引用類型保存的是地址。spa
建立一個新的變量時,會將它存放在棧中,若是是對象的話,就會在另外的更大的堆中劃分一片區域,那麼在棧中該對象存放的就是在堆中的地址。code
如上圖,基本數據類型是直接在棧中存放值的,當a發生變化的時候,b不會發生變化,由於b只是等於a的值,和a沒有什麼關係。對象
在obj1和obj2中存放的都是地址,obj2不是等於obj1的值,而是等於obj1在堆中存放的地址,因此當地址中的內容發生變化時,obj2的內容也會發生變化。只要建立一個新的對象,在堆中就會開闢一個新的區域去存放對象的屬性和方法等內容。blog