JavaScript 常量是那些在整个程序执行过程中其值保持不变的变量。你可以使用 const
关键字来声明常量。
const
关键字是在 ES6 版本的 JavaScript 中与 let
关键字一同引入的。const
关键字用来定义具有常量引用的变量。使用 const
声明的变量不能被重新声明或重新赋值。const
声明具有块作用域以及函数作用域。
声明 JavaScript 常量
如果你使用 const
关键字声明变量,则总需要在声明时赋予一个值。
const x = 10;
在任何情况下,你不能使用 const
关键字声明没有初始化的变量。
const y;
y = 20;
不能被重新赋值
你不能更新使用 const
关键字声明的变量的值。
const y = 20;
y = 40;
块作用域
使用 const
关键字声明的 JavaScript 变量具有块作用域。这意味着相同的变量在块之外被视为不同的变量。
在下面的例子中,在块内声明的 x
与在块外声明的 x
是不同的。因此我们可以在块之外重新声明相同的变量,
{
const x = "john";
}
const x = "Doe"
但是在相同的块内我们不能重新声明 const
变量。
{
const x = "john";
const x = "Doe"
}
JavaScript 中的常量数组和对象
我们可以使用 const
关键字声明数组和对象,但在数组和对象声明中有一点变化。
带有 const
关键字的变量保留的是常量引用而不是常量值。所以,你可以更新使用 const
关键字声明的相同数组或对象,但你不能将新数组或对象的引用重新赋值给常量变量。
示例(常量数组)
在下面的例子中,我们使用 const
关键字定义了一个名为 'arr'
的数组。之后,我们更新了索引 0 处的数组元素,并在数组末尾插入了 'fence'
字符串。
在输出中,你可以观察到它打印出了更新后的数组。
<html>
<head>
<title> 常量数组 </title>
</head>
<body>
<script>
const arr = ["door", "window", "roof", "wall"];
arr[0] = "gate";
arr.push("fence");
document.write(arr);
</script>
</body>
</html>
当你执行上述代码时,它将产生以下结果:
gate,window,roof,wall,fence
示例(常量对象)
在下面的例子中,我们使用 const
关键字创建了 'obj'
对象。接着,我们更新了对象的 'animal'
属性,并在对象中插入了 'legs'
属性。在输出中,代码打印出了更新后的对象。
<html>
<head>
<title> 常量对象 </title>
</head>
<body>
<script>
const obj = {
animal: "Lion",
color: "Yellow",
};
obj.animal = "Tiger";
obj.legs = 4;
document.write(JSON.stringify(obj));
</script>
</body>
</html>
它将产生以下结果:
{"animal":"Tiger","color":"Yellow","legs":4}
因此,我们不能更改使用 const
关键字声明的变量(数组和对象)的引用,但可以更新元素和属性。
没有 const
提升
使用 const
关键字定义的变量不会被提升到代码的顶部。
在下面的例子中,const
变量 x
在定义之前就被访问了。这将导致错误。我们可以使用 try-catch 语句来捕获这个错误。
<html>
<body>
<script>
document.write(x);
const x = 10;
</script>
</body>
</html>
这里还有一些关于使用 const
关键字声明的变量的其他属性。
-
-
-
使用
const
关键字声明的变量不能在代码的顶部被提升。
-
var
, let
和 const
之间的区别
我们给出了使用 var
, let
和 const
关键字声明的变量之间的比较表。
比较依据 |
var |
let |
const |
作用域 |
函数 |
块 |
块 |
提升 |
是 |
否 |
否 |
重新赋值 |
是 |
是 |
否 |
重新声明 |
是 |
否 |
否 |
绑定 this |
是 |
否 |
否 |
在 var
, let
和 const
之间你应该使用哪一个?
对于块作用域,你应该使用 let
关键字。 如果你需要为某个值分配常量引用,使用 const
关键字。 当你需要在特定的块内定义变量,比如循环、if 语句等,并且需要在块之外但在函数之内访问时,你可以使用 var
关键字。 然而,你可以使用任何一个关键字来定义全局变量。 重新声明变量不是好的做法。所以你应该避免这样做,但如果有必要的话,你可以使用 var
关键字。