小編在之前的文章更新過關(guān)于es6中,定義變量的關(guān)鍵字,let和const,今天在找資料的時候,發(fā)現(xiàn)了const定義變量的新特點,今天特來用一篇文章來記錄下。大家還可以關(guān)注我的微信公眾號,蝸牛全棧。
我們都知道const是用來定義常量的,定義之后不可以改變,但是這個不可改變,只限于基本數(shù)據(jù)類型。在用const定義后的基本數(shù)據(jù)類型變量,再改變的時候就會出現(xiàn)問題,比如
const num1 = 2
num1 = 3 // Uncaught TypeError: Assignment to constant variable.
對于引用數(shù)據(jù)類型,主要是數(shù)組和對象,會有這樣“神奇”的現(xiàn)象
const arr = []
arr.push(666)
console.log(arr) // [666]
const obj = {}
obj.name = "lilei"
console.log(obj) // {name:"lilei"}
為什么const沒有對他們一視同仁呢?究其原因還是因為基本數(shù)據(jù)類型,像Number類型、Boolean類型是存儲在棧內(nèi)存中,而引用數(shù)據(jù)類型,是存儲在堆內(nèi)存中,變量直接引用堆內(nèi)存的地址。這也就導(dǎo)致了兩種數(shù)據(jù)類型的拷貝情況完全不同。這也就解釋了const定義的引用數(shù)據(jù)類型可以再次修改,因為變量一直指向在堆內(nèi)存中的地址,即使數(shù)據(jù)改變了,但是地址沒改變,所以引用數(shù)據(jù)類型,用const定義之后,也可以修改。又是離前端大神更進一步的一天,加油!