1. 程式人生 > >ES6新增const誤區

ES6新增const誤區

我們使用const宣告常量時,總認為值一旦宣告就不可改變,然後我發現在定義物件時,物件的值是可以改變的;

對於數值:

var message = "Hello!";
let age = 25;

// 以下兩行都會報錯
const message = "Goodbye!";
const age = 30;

對於物件

const foo = {};

// 為 foo 新增一個屬性,可以成功
foo.prop = 123;
foo.prop // 123

// 將 foo 指向另一個物件,就會報錯
foo = {}; // TypeError: "foo" is read-only

查閱相關資料得知

const實際上保證的,並不是變數的值不得改動,而是變數指向的那個記憶體地址不得改動。對於簡單型別的資料(數值、字串、布林值),值就儲存在變數指向的那個記憶體地址,因此等同於常量。

但對於複合型別的資料(主要是物件和陣列),變數指向的記憶體地址,儲存的只是一個指標,const只能保證這個指標是固定的,至於它指向的資料結構是不是可變的;