JavaScript Const
ECMAScript 2015
ES2015 引入了兩個重要的 JavaScript 新關鍵詞:let
和 const
。
通過 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; // 允許
在同一作用域或塊中,不允許將已有的 var
或 let
變量重新聲明或重新賦值給 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";