1. 程式人生 > >理解JavaScript的變數型別

理解JavaScript的變數型別

在JavaScript中,我們可以通過3個關鍵字定義變數:var、let和const。這3個關鍵字有兩點不同:可變性,與詞法環境的關係。注意:var關鍵字從一開始就是JavaScript的一部分,而let與const是在ES6時加進來的。

變數可變性

如果通過變數的可變性來進行分類,那麼可以將const放在一組,var和let放在一組。通過const定義的變數都不可變,也就是說通過const宣告的變數的值只能設定一次。通過var或let宣告的變數的值可以變更任意次數。

const變數

通過const宣告的“變數”與普通變數類似,但在宣告時需要寫初始值,一旦宣告完成之後,其值就無法更改。

const變數常用於兩種目的:

1.不需要重新賦值的特殊變數

2.指向一個固定的值,例如球隊人數的最大值,可通過const變數MAX_RONIN_COUNT來表示,而不是僅僅通過數字234來表示。這使得程式碼更加容易理解和維護。雖然程式碼裡沒有直接使用數字234,但是通過語義化的變數名MAX_RONIN_COUNT來表示,MAX_RONIN_COUNT的值只能指定一次。在其他情況下,由於在程式執行過程中不允許對const變數重新賦值,這可以避免程式碼發生不必要的變更,同時也為JavaScript引擎效能優化提供便利。

console.log("------------------const變數的行為-------------------");
//定義const變數,並驗證該變數已被賦值
const firstConst = 'samurai';
if (firstConst === 'samurai') {
  console.log("FirstConst is a samurai.");
}

//試圖為const變數重新賦值將丟擲異常
try {
  firstConst = "ninja";
  console.log("Should not be here!");
} catch (e) {
  console.log("An exception has occurred!");
}

if (firstConst === 'samurai') {
  console.log("firstConst is still a samurai!");
}


//建立一個新的const變數,並賦值為空物件
const secondConst = {};

//我們不能再將一個全新的物件賦值給secondConst變數,但是可用對原有變數進行修改。
secondConst.weapon = "wakizashi";
if (secondConst.weapon === 'wakizashi') {
  console.log("We can add new properties!");
}

//const陣列也一樣
const thirdConst = [];
if (thirdConst.length === 0) {
  console.log("No items in our array.");
}
thirdConst.push("Yoshi");
if (thirdConst.length === 1) {
  console.log("The array has changed!");
}

 

 

這裡首先定義了一個名為firstConst的const變數,並賦值為samurai,驗證該變數已經被初始化,結果如預期:

const firstConst = 'samurai';

if (firstConst === 'samurai') {

console.log("FirstConst is a samurai.");

}

 

接著試圖將一個全新的值ninja賦值給firstConst變數:

try {

firstConst = "ninja";

console.log("Should not be here!");

} catch (e) {

console.log("An exception has occurred!");

}

 

由於firstConst變數是靜態變數,不允許重新賦值,因此,JavaScript引擎丟擲異常。

console.log("Should not be here!");與console.log("An exception has occurred!");用於驗證異常是否發生。

 

接下來,定義另一個const變數,並將其初始化為一個空物件:

const secondConst = {};

 

const變數的一個重要特性。我們不能將一個全新的值賦值給const變數。但是,我們可以修改const已有的物件。比如給已有的物件新增屬性:

secondConst.weapon = "wakizashi";

if (secondConst.weapon === 'wakizashi') {

console.log("We can add new properties!");

}

 

//如果const變數指向一個數組,我們可以增加該陣列的長度

const thirdConst = [];

if (thirdConst.length === 0) {

console.log("No items in our array.");

}

thirdConst.push("Yoshi");

if (thirdConst.length === 1) {

console.log("The array has changed!");

}

 

這就是const變數的全部特性。const變數並不複雜。你只需要記住const變數只能在宣告的時候被初始化一次,之後再也不允許將全新的值賦值給const變數即可。但是,我們仍然可以修改const變數已經存在的值,只是不能重寫const變數。

 

參考《JavaScript忍者祕籍》