const 聲明一個(gè)只讀的常量恳不,一旦聲明事期,就無法修改它的值
一 const 與 let 的共同點(diǎn)
一樣存在 一樣的塊級作用域 暫時(shí)性死區(qū) 不可重復(fù)聲明溃睹。
// 塊級作用域
if (true) {
const MAX = 5;
}
MAX // Uncaught ReferenceError: MAX is not defined
// 不存在變量提升
if (true) {
console.log(MAX); // ReferenceError
const MAX = 5;
}
// 不可重復(fù)聲明
var message = "Hello!";
let age = 25;
const message = "Goodbye!"; // 報(bào)錯(cuò)
const age = 30;// 報(bào)錯(cuò)
二 const 本質(zhì)
const實(shí)際上保證的已亥,并不是變量的值不得改動(dòng)逝慧,而是變量指向的那個(gè)內(nèi)存地址不得改動(dòng)劫拗。對于簡單類型的數(shù)據(jù)(數(shù)值惯悠、字符串卵惦、布爾值)唠倦,值就保存在變量指向的那個(gè)內(nèi)存地址竞滓,因此等同于常量诀拭。但對于復(fù)合類型的數(shù)據(jù)(主要是對象和數(shù)組)木张,變量指向的內(nèi)存地址众辨,保存的只是一個(gè)指針,const只能保證這個(gè)指針是固定的舷礼,至于它指向的數(shù)據(jù)結(jié)構(gòu)是不是可變的鹃彻,就完全不能控制了∑尴祝可以修改復(fù)合數(shù)據(jù)類型的的屬性蛛株。
const foo = {};
// 為 foo 添加一個(gè)屬性,可以成功
foo.prop = 123;
foo.prop // 123
// 將 foo 指向另一個(gè)對象育拨,就會(huì)報(bào)錯(cuò)
foo = {}; // TypeError: "foo" is read-only
上面代碼中谨履,常量foo儲(chǔ)存的是一個(gè)地址,這個(gè)地址指向一個(gè)對象至朗。不可變的只是這個(gè)地址屉符,即不能把foo指向另一個(gè)地址,但對象本身是可變的,所以依然可以為其添加新屬性矗钟。