ES6之const常量是否真的不能被修改?

  1. const的定義:是一個只讀的常量,一旦聲明,不可修改
  2. 是否真的不能修改?敲幾段代碼看一下

  1. 由上圖可看到,const定義string常量後,嘗試進行修改,報錯 ‘Assignment to constant variable’
  2. 再敲幾段代碼看一下

  1. 從上述幾段代碼可以看出,當const定義的常量爲 '基礎數據類型' 時,不能被修改;當定義的常量爲 '引用數據類型' 時,我們可以通過其屬性進行數據修改
  2. 爲何會如此呢?
  3. 因爲const常量保證值不能被改變,其實保證的是常量指向的內存地址所保存的數據不能被修改:

'基礎數據類型‘的 值就保存在內存地址中,所以const定義的 ‘基礎數據類型’ 不可被改變。 

而 '引用數據類型’ 指向的內存地址只是一個指針,通過指針來指向實際數據,也就是說,不可被改變的是指針,而不是數據,所以const定義的 ”引用數據類型的‘ 常量可以通過屬性來修改值。這就牽扯出棧內存和堆內存。

  1. 由圖可看出,基礎數據類型的變量和值都在 '棧內存' 中,指向的內存地址不可被修改
  2. 引用數據類型的 變量存儲在 '棧內存' 中,值存儲在 '堆內存' 中,通過指針來指向 '堆內存' 中對應的 值,所以,const定義的 引用數據類型,不可被改變的是 '指針' , 所以可以通過 屬性來修改值。
  3. 棧和堆在下一篇文章記錄,同時還能帶出 '深淺拷貝' 的話題。

以上內容爲 個人理解,並參考其他大牛文章,如有錯誤,歡迎指出,及時更正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章