JavaScript 常量怎么定义和使用?

文章导读
上一个 测验 下一个 JavaScript 常量 是指在程序执行过程中值保持不变的变量。您可以使用 const 关键字声明常量。
📋 目录
  1. A JavaScript const 关键字
  2. B 声明 JavaScript 常量
  3. C 不能被重新赋值
  4. D 块级作用域
  5. E JavaScript 中的常量数组和对象
  6. F const 不存在提升
  7. G var、let 和 const 之间的区别
  8. H var、let 和 const 中应该使用哪一个?
A A

JavaScript - 常量



上一个
测验
下一个

JavaScript 常量 是指在程序执行过程中值保持不变的变量。您可以使用 const 关键字声明常量。

JavaScript const 关键字

const 关键字与 let 关键字一起在 JavaScript 的 ES6 版本中引入。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> Constant Arrays </title>
</head>
<body>
   <script>
      // 定义常量数组
      const arr = ["door", "window", "roof", "wall"];
      // 更新 arr[0]
      arr[0] = "gate";
      // 向数组插入元素
      arr.push("fence");
	  //arr = ["table", "chair"] // 重新赋值数组会导致错误。
      // 打印数组
      document.write(arr);
   </script>
</body>
</html>

执行上述代码将产生以下结果 −

gate,window,roof,wall,fence

示例(常量对象)

在下面的示例中,我们使用 const 关键字创建了 'obj' 对象。接下来,我们更新了对象的 'animal' 属性,并在对象中插入 'legs' 属性。在输出中,代码打印了更新后的对象。

<html>
<head>
   <title> Constant Objects </title>
</head>
<body>
   <script>
      // 定义常量对象
      const obj = {
         animal: "Lion",
         color: "Yellow",
      };
      // 更改动物名称
      obj.animal = "Tiger";
      // 插入 legs 属性
      obj.legs = 4;
      // 打印对象
      document.write(JSON.stringify(obj));
      // obj = { name: "cow" } // 这不可能
   </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 关键字。