const 命令

注:const的作用域與let命令相同:只在聲明所在的塊級作用域內(nèi)有效。

if(true){

const MAX=5;

}

MAX// Uncaught ReferenceError: MAX is not defined




const聲明一個只讀的常量。一旦聲明,常量的值就不能改變。

const PI = 3.1415;

PI // 3.1415

PI = 3;

// TypeError: Assignment to constant variable.

上面代碼表明改變常量的值會報錯。




const聲明的變量不得改變值,這意味著,const一旦聲明變量,就必須立即初始化,不能留到以后賦值。

const foo;

// SyntaxError: Missing initializer in const declaration

上面代碼表示,對于const來說,只聲明不賦值,就會報錯。



const命令聲明的常量也是不提升,同樣存在暫時性死區(qū),只能在聲明的位置后面使用。

if(true){

console.log(MAX);// ReferenceErrorconst

MAX=5;

}




const聲明的常量,也與let一樣不可重復(fù)聲明。

var? message="Hello!";

let?? age=25;

// 以下兩行都會報錯

const? message="Goodbye!";

const age=30;




const實(shí)際上保證的,并不是變量的值不得改動,而是變量指向的那個內(nèi)存地址不得改動。對于簡單類型的數(shù)據(jù)(數(shù)值、字符串、布爾值),值就保存在變量指向的那個內(nèi)存地址,因此等同于常量。但對于復(fù)合類型的數(shù)據(jù)(主要是對象和數(shù)組),變量指向的內(nèi)存地址,保存的只是一個指針,const只能保證這個指針是固定的,至于它指向的數(shù)據(jù)結(jié)構(gòu)是不是可變的,就完全不能控制了。因此,將一個對象聲明為常量必須非常小心。


const foo = {};

// 為 foo 添加一個屬性,可以成功

foo.prop = 123;

foo.prop // 123

// 將 foo 指向另一個對象,就會報錯

foo = {}; // TypeError: "foo" is read-only

上面代碼中,常量foo儲存的是一個地址,這個地址指向一個對象。不可變的只是這個地址,即不能把foo指向另一個地址,但對象本身是可變的,所以依然可以為其添加新屬性。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容