本節咱們學習 ES6
中的 const
命令,const
也是 ES6
中新增的一個命令。const
聲明一個只讀常量,一旦聲明常量,就必須當即初始化。改變常量的值或者僅聲明但不賦初始值都會報錯。javascript
const
聲明一個只讀的常量,一旦聲明,常量的值就不能改變。實際上,不能改動的不是值,而是變量指向的那個內存地址所保存的數據不得改動。java
使用 const
命令聲明變量其實和 let
的使用方法差很少,例如聲明一個常量 a
:數組
const a = 1; console.log(a);
const
聲明常量後必須當即初始化,不能留到之後賦值。數據結構
const a; a = 1; console.log(a);
報錯信息:學習
SyntaxError: Missing initializer in const declaration
報錯信息提示咱們,const
聲明中缺乏初始值設定項,也就是說沒有賦初始值。指針
使用 const
命令聲明一個常量後,常量的值便不能夠改變,不然會報錯。code
例如聲明 a
並將之賦值爲 1 以後,修改 a
的值爲10:對象
const a = 1; a = 10; // 常量的值不可改變 console.log(a);
報錯信息以下所示:ip
TypeError: Assignment to constant variable.
const
和 let
仍是有不少類似點的,例如只在聲明所在的塊級做用域內有效。內存
{ const a = 1; } console.log(a);
報錯信息以下,提示咱們 a
沒有被聲明:
ReferenceError: a is not defined
除此以外,還有 const
命令聲明的常量也是不提高的,一樣存在暫時性死區,只能在聲明的位置後面使用。
if(true){ console.log(PI); const PI = 10; }
報錯信息以下,不能在初始化以前調用常量 PI
:
ReferenceError: Cannot access 'PI' before initialization
const
聲明的常量,也與 let
同樣不可重複聲明。
var a = 10; let b = 20; // 如下兩行都會報錯 const a = 100; const b = 200;
報錯信息以下所示:
SyntaxError: Identifier 'a' has already been declared
const
實際上保證的,並非變量的值不得改動,而是變量指向的那個內存地址所保存的數據不得改動。
const
只能保證這個指針是固定的(即老是指向另外一個固定的地址),至於它指向的數據結構是否是可變的,就徹底不能控制了。咱們來看下面這個例子:
const xkd = {}; xkd.prop = 123; console.log(xkd.prop); // 輸出:123 xkd = {}; // 輸出:TypeError: Assignment to constant variable.
上面代碼中,常量 xkd
儲存的是一個地址,這個地址指向一個對象。不可變的只是這個地址,即不能把 xkd
指向另外一個地址,但對象自己是可變的,因此依然能夠爲其添加新屬性。
想看更多能夠查看:https://www.9xkd.com/