JS中的簡單數(shù)據(jù)類型有 number, string, bool, undefined和null, 先來介紹一下簡單數(shù)據(jù)類型在內(nèi)存中是如何存儲的
當(dāng)我們聲明一個(gè)變量a的時(shí)候, 會在棧里面開辟出一塊新的內(nèi)存空間, 用來存放這個(gè)變量a的數(shù)值, 當(dāng)這個(gè)變量a存儲的數(shù)值發(fā)生改變時(shí), ??臻g里的對應(yīng)那塊內(nèi)存里的數(shù)據(jù)也會發(fā)生改變, 此時(shí)如果又聲明了一個(gè)變量b, 并把變量a賦值給變量b時(shí), 在棧里面又會新開辟出一塊空間, 用來存放變量b存儲的數(shù)值, 而這個(gè)數(shù)值, 是變量a傳遞給他的, 因此, 此時(shí)兩個(gè)變量分別對應(yīng)兩塊內(nèi)存空間, 存儲的值是相同的, 因此, 當(dāng)變量a發(fā)生改變時(shí), 并不會影響到變量b所擁有的那塊內(nèi)存空間, 所以變量b是不會改變的

JS中除了上述所說的簡單數(shù)據(jù)類型, 其他都是復(fù)雜數(shù)據(jù)類型, 復(fù)雜數(shù)據(jù)類型在聲明之后, 會在堆內(nèi)存中開辟出一塊空間, 用來存放數(shù)據(jù), 拿對象舉例, 在我們新建一個(gè)對象之后, 會在堆內(nèi)存中開辟一塊空間, 用來存放對象里的數(shù)據(jù), 而復(fù)雜數(shù)據(jù)類型跟簡單數(shù)據(jù)類型的不同點(diǎn)就是在于, 簡單數(shù)據(jù)類型的變量指向的是內(nèi)存中的數(shù)據(jù), 而復(fù)雜數(shù)據(jù)類型指向的是其在內(nèi)存中的地址,通過這個(gè)地址, 從而拿到地址中的數(shù)據(jù), 因此, 如果將一個(gè)對象賦值給另一個(gè)對象的時(shí)候, 其實(shí)是把這個(gè)對象在內(nèi)存空間中的地址傳遞給了另一個(gè)對象, 此時(shí), 他們共享內(nèi)存中的同一塊空間以及空間里的數(shù)據(jù), 如果對其中一個(gè)對象的一個(gè)屬性進(jìn)行修改的話, 那么因?yàn)閮蓚€(gè)對象是共享一塊地址一個(gè)數(shù)據(jù)的, 因此另一個(gè)對象中的屬性也會被改變. 如果對其中一個(gè)對象重新賦值的話, 那么這個(gè)對象就會指向另一塊內(nèi)存空間, 就不在與另一個(gè)對象共享同一塊內(nèi)存了
