JavaScript Const

ECMAScript 2015

ES2015 引入了兩個重要的 JavaScript 新關鍵詞:letconst

通過 const 定義的變量與 let 變量類似,但不能重新賦值:

實例

const PI = 3.141592653589793;
PI = 3.14;      // 會出錯
PI = PI + 10;   // 也會出錯

親自試一試

塊作用域

塊作用域內使用 const 聲明的變量與 let 變量相似。

在本例中,x 在塊中聲明,不同于在塊之外聲明的 x:

實例

var x = 10;
// 此處,x 為 10
{ 
  const x = 6;
  // 此處,x 為 6
}
// 此處,x 為 10

親自試一試

您可以在上一章 JavaScript Let 中學到更多有關塊作用域的知識。

在聲明時賦值

JavaScript const 變量必須在聲明時賦值:

不正確

const PI;
PI = 3.14159265359;

正確

const PI = 3.14159265359;

不是真正的常數

關鍵字 const 有一定的誤導性。

它沒有定義常量值。它定義了對值的常量引用。

因此,我們不能更改常量原始值,但我們可以更改常量對象的屬性。

原始值

如果我們將一個原始值賦給常量,我們就不能改變原始值:

實例

const PI = 3.141592653589793;
PI = 3.14;      // 會出錯
PI = PI + 10;   // 也會出錯

親自試一試

常量對象可以更改

您可以更改常量對象的屬性:

實例

// 您可以創建 const 對象:
const car = {type:"porsche", model:"911", color:"Black"};
// 您可以更改屬性:
car.color = "White";
// 您可以添加屬性:
car.owner = "Bill";

親自試一試

但是您無法重新為常量對象賦值:

實例

const car = {type:"porsche", model:"911", color:"Black"};
car = {type:"Volvo", model:"XC60", color:"White"};    // ERROR

親自試一試

常量數組可以更改

您可以更改常量數組的元素:

實例

// 您可以創建常量數組:
const cars = ["Audi", "BMW", "porsche"];
// 您可以更改元素:
cars[0] = "Honda";
// 您可以添加元素:
cars.push("Volvo");

親自試一試

但是您無法重新為常量數組賦值:

實例

const cars = ["Audi", "BMW", "porsche"];
cars = ["Honda", "Toyota", "Volvo"];    // ERROR

親自試一試

瀏覽器支持

Internet Explorer 10 或更早版本不支持 const 關鍵詞。

下表定義了第一個完全支持 const 關鍵詞的瀏覽器版本:

Chrome 49 IE / Edge 11 Firefox 36 Safari 10 Opera 36
2016 年 3 月 2013 年 10 月 2015 年 2 月 2016 年 9 月 2016 年 3 月

重新聲明

在程序中的任何位置都允許重新聲明 JavaScript var 變量:

實例

var x = 2;    //  允許
var x = 3;    //  允許
x = 4;        //  允許

在同一作用域或塊中,不允許將已有的 varlet 變量重新聲明或重新賦值給 const

實例

var x = 2;         // 允許
const x = 2;       // 不允許
{
  let x = 2;     // 允許
  const x = 2;   // 不允許
}

在同一作用域或塊中,為已有的 const 變量重新聲明聲明或賦值是不允許的:

實例

const x = 2;       // 允許
const x = 3;       // 不允許
x = 3;             // 不允許
var x = 3;         // 不允許
let x = 3;         // 不允許
{
  const x = 2;   // 允許
  const x = 3;   // 不允許
  x = 3;         // 不允許
  var x = 3;     // 不允許
  let x = 3;     // 不允許
}

在另外的作用域或塊中重新聲明 const 是允許的:

實例

const x = 2;       // 允許
{
  const x = 3;   // 允許
}
{
  const x = 4;   // 允許
}

提升

通過 var 定義的變量會被提升到頂端。如果您不了解什么是提升(Hoisting),請學習提升這一章。

您可以在聲明 var 變量之前就使用它:

實例

carName = "Volvo";    // 您可以在此處使用 carName
var carName;

親自試一試

通過 const 定義的變量不會被提升到頂端。

const 變量不能在聲明之前使用:

實例

carName = "Volvo";    // 您不可以在此處使用 carName
const carName = "Volvo";