JavaScript Const
不能重新赋值
使用 const
关键字定义的变量不能重新赋值。
必须被赋值
JavaScript const
变量必须在声明时被赋值。
正确
const PI = 3.14159265359;
错误
const PI;
PI = 3.14159265359;
何时使用 JavaScript const?
当你确定值不应该被更改时,总是使用 const
声明变量。
使用 const
声明
- 一个新数组
- 一个新对象
- 一个新函数
- 一个新正则表达式
常量对象和数组
关键字 const
有点误导。
它并不定义一个常量值,而是定义一个指向值的常量引用。
因此,你不能
- 重新赋值一个常量值
- 重新赋值一个常量数组
- 重新赋值一个常量对象
- 更改常量数组的元素
- 更改常量对象的属性
但你可以
常量数组
你可以更改常量数组的元素
示例
// 你可以创建一个常量数组
const cars = ["Saab", "Volvo", "BMW"];
// 你可以更改一个元素
cars[0] = "Toyota";
// 你可以添加一个元素
cars.push("Audi");
试试看 »
但你不能重新赋值数组
常量对象
您可以更改常量对象的属性
示例
// 您可以创建一个常量对象
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 之间的区别
作用域 | 重新声明 | 重新赋值 | 提升 | 绑定 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; // 允许
}
提升
用 var
定义的变量会被提升到顶部,并且可以在任何时候被初始化。
意思:您可以在声明变量之前使用它
如果您想了解更多有关提升的信息,请学习 JavaScript 提升 章节。
用 const
定义的变量也会被提升到顶部,但不会被初始化。
意思:在声明 const
变量之前使用它会导致 ReferenceError