JavaScript Const
不能重新賦值
使用 const
關鍵字定義的變數不能被重新賦值
必須賦值
JavaScript const
變數必須在宣告時賦值
正確
const PI = 3.14159265359;
不正確
const PI;
PI = 3.14159265359;
何時使用 JavaScript const?
當你知道值不應被更改時,始終使用 const
宣告一個變數。
宣告時使用 const
- 新的 Array
- 新的 Object
- 新的 Function
- 新的 RegExp
常量物件和陣列
const
關鍵字有點誤導。
它不定義一個常量值。它定義了一個指向值的常量引用。
因此,您不能
- 重新分配常量值
- 重新分配常量陣列
- 重新分配常量物件
- 更改常量陣列的元素
- 更改常量物件的屬性
但是,您可以
常量陣列
您可以更改常量陣列的元素
示例
// 您可以建立一個常量陣列
const cars = ["Saab", "Volvo", "BMW"];
// 您可以更改一個元素
cars[0] = "Toyota";
// 您可以新增一個元素
cars.push("Audi");
自己動手試一試 »
但是您不能重新分配陣列
常量物件
您可以更改常量物件的屬性
示例
// 您可以建立一個 const 物件
const car = {type:"Fiat", model:"500", color:"white"};
// 您可以更改一個屬性
car.color = "red";
// 您可以新增一個屬性
car.owner = "Johnson";
自己動手試一試 »
但是您不能重新分配物件
示例
const car = {type:"Fiat", model:"500", color:"white"};
car = {type:"Volvo", model:"EX60", color:"red"}; // 錯誤
自己動手試一試 »
var, let 和 const 之間的區別
作用域 | 重新宣告 | 重新賦值 | 提升 (Hoisted) | 繫結 this | |
var | 否 | 是 | 是 | 是 | 是 |
let | 是 | 否 | 是 | 否 | 否 |
const | 是 | 否 | 否 | 否 | 否 |
什麼好?
let
和 const
具有塊級作用域。
let
和 const
不能被重新宣告。
let
和 const
必須在使用前宣告。
let
和 const
不會繫結到 this
。
let
和 const
不會提升。
什麼不好?
var
不必宣告。
var
會被提升。
var
繫結到 this。
瀏覽器支援
Internet Explorer 11 或更早版本不支援 let
和 const
關鍵字。
下表定義了首次完全支援的版本
Chrome 49 | Edge 12 | Firefox 36 | Safari 11 | Opera 36 |
2016 年 3 月 | 2015 年 7 月 | 2015 年 1 月 | 2017 年 9 月 | 2016 年 3 月 |
塊作用域
使用 const
宣告變數在塊級作用域方面與 let
類似。
在此示例中,塊內宣告的 x 與塊外宣告的 x 不同
您可以在 JavaScript 作用域章節中瞭解更多關於塊級作用域的知識。
重新宣告
在程式中的任何位置都可以重新宣告 JavaScript var
變數
示例
var x = 2; // 允許
var x = 3; // 允許
x = 4; // 允許
在同一作用域中,不允許將已存在的 var
或 let
變數重新宣告為 const
示例
var x = 2; // 允許
const x = 2; // 不允許
{
let x = 2; // 允許
const x = 2; // 不允許
}
{
const x = 2; // 允許
const x = 2; // 不允許
}
在同一作用域中,不允許重新賦值已存在的 const
變數
示例
const x = 2; // 允許
x = 2; // 不允許
var x = 2; // 不允許
let x = 2; // 不允許
const x = 2; // 不允許
{
const x = 2; // 允許
x = 2; // 不允許
var x = 2; // 不允許
let x = 2; // 不允許
const x = 2; // 不允許
}
在另一個作用域或另一個塊中,允許使用 const
重新宣告變數
示例
const x = 2; // 允許
{
const x = 3; // 允許
}
{
const x = 4; // 允許
}
提升 (Hoisting)
使用 var
定義的變數會被提升到頂部,並可以隨時初始化。
含義:您可以在宣告變數之前使用它
如果您想了解更多關於提升的資訊,請學習 JavaScript 提升章節。
使用 const
定義的變數也會被提升到頂部,但不會初始化。
含義:在宣告之前使用 const
變數將導致 ReferenceError