天天看點

ES6 const 介紹

使用const文法建立變量,一旦建立成功,就不能改變它們的值,是以我們稱為常量。如果你嘗試改變一個const變量,則會抛出異常
const a = 2;
a = 3
VM27863:1 Uncaught TypeError: Assignment to constant variable.
    at <anonymous>:1:3           
原理:阻隔變量所對應記憶體位址被改變

ES6在對變量的引用進行讀取時,會從該變量目前所對應的記憶體位址所指向記憶體空間中讀取内容。當變量改變時,引擎會重新從記憶體配置設定一個新的記憶體以存儲新值,并将新值的記憶體位址與變量進行綁定。const的原理便是在變量名與記憶體位址時間建立不可變的綁定。

可變的對象變量
const obj = {name: 111}
obj.name = 222
這樣是可以改變的,改變的隻是對象屬性的值,對象本身的位址引用并沒有改變,是以不報錯

obj = {age: 12}
這樣就會報錯,因為嘗試去改變obj的位址引用           
如何讓對象的屬性不可變呢

可以用Object.freeze(),該方法為淺當機

const obj = Object.freeze({
  name: 222,
  school: {
    name: '學校'
  }
})
obj.name = 333 // 不會有任何變化,嚴格模式下會報錯
obj.school.name = 'jj' // 會重新指派