`const`聲明一個只讀的常量。一旦聲明,常量的值就不能改變。
~~~javascript
const PI = 3.1415;
PI = 3; // TypeError: Assignment to constant variable.
~~~
`const`聲明的變量不得改變值,這意味著,`const`一旦聲明變量,就必須立即初始化,不能留到以后賦值。
~~~javascript
const hello; // SyntaxError: Missing initializer in const declaration
~~~
此外,`const`命令不可重復聲明同名變量,聲明的變量不提升,同樣存在暫時性死區。
> `const`實際上保證的,并不是變量的值不得改動,而是變量指向的那個內存地址所保存的數據不得改動。對于簡單類型的數據(數值、字符串、布爾值),值就保存在變量指向的那個內存地址,因此等同于常量。但對于復合類型的數據(主要是對象和數組),變量指向的內存地址,保存的只是一個指向實際數據的指針,`const`只能保證這個指針是固定的(即總是指向另一個固定的地址),至于它指向的數據結構是不是可變的,就完全不能控制了。
~~~javascript
const person = {};
person.name = "tom";
person = {name: "jerry"};
// TypeError: Assignment to constant variable.
~~~