ES6中神奇的const

小編在之前的文章更新過關(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定義之后,也可以修改。又是離前端大神更進一步的一天,加油!

參考文章: https://www.cnblogs.com/0955xf/p/12634672.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容