Javascript 简明教程

JavaScript - Constants

JavaScript Constants

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

const 关键字在 JavaScript 的 ES6 版本中引入,与 let 关键字一起使用。const 关键字用于定义具有 constant reference 的变量。用 const 定义的变量不能 redeclaredreassigned 。const 声明具有块和函数范围。

Declaring JavaScript Constants

如果使用 const 关键字声明变量,则始终需要在声明时分配一个值。

const x = 10; // Correct Way

在任何情况下,都不能不初始化而使用 const 关键字声明变量。

const y; // Incorrect way
y = 20;

Can’t be Reassigned

不能更新用 const 关键字声明的变量的值。

const y = 20;
y = 40; // This is not possible

Block Scope

使用 const 关键字声明的 JavaScript 变量具有块级作用域。这意味着在块级作用域外,它被视为不同的变量。

在以下示例中,在块级作用域内声明的 x 与在块级作用域外声明的 x 不同。因此,可以在块级作用域外 redeclare 同一个变量。

{
const x = "john";
}
const x = "Doe"

但在同一个块级作用域内 can’t redeclare const 变量。

{
const x = "john";
const x = "Doe" // incorrect
}

Constant Arrays and Objects in JavaScript

可以使用 const 关键字声明数组和对象,但在数组和对象声明中有一点小技巧。

使用 const 关键字的变量保持常量引用,而不是常量值。因此,您可以更新使用 const 关键字声明的同一数组或对象,但不能将新数组或对象的引用重新分配给该常量变量。

Example (Constant Arrays)

在以下示例中,我们使用 const 关键字定义名为“arr”的数组。之后,我们更新数组中第一个元素并插入“fence”字符串作为数组的末尾元素。

在输出中,您可以看到它打印了更新后的数组。

<html>
<head>
   <title> Consant Arrays </title>
</head>
<body>
   <script>
      // Defining the constant array
      const arr = ["door", "window", "roof", "wall"];
      // Updating arr[0]
      arr[0] = "gate";
      // Inserting an element to the array
      arr.push("fence");
	  //arr = ["table", "chair"] // reassiging array will cause error.
      // Printing the array
      document.write(arr);
   </script>
</body>
</html>

执行以上代码时,将会产生以下结果 −

gate,window,roof,wall,fence

Example (Constant Objects)

在以下示例中,我们用 const 关键字创建“obj”对象。接下来,我们更新对象的“animal”属性并在对象中插入“legs”属性。在输出中,代码将会打印已更新的对象。

<html>
<head>
   <title> Constant Objects </title>
</head>
<body>
   <script>
      // Defining the constant object
      const obj = {
         animal: "Lion",
         color: "Yellow",
      };
      // Changing animal name
      obj.animal = "Tiger";
      // Inserting legs property
      obj.legs = 4;
      // Printing the object
      document.write(JSON.stringify(obj));
      // obj = { name: "cow" } // This is not possible
   </script>
</body>
</html>

它将产生以下结果 −

{"animal":"Tiger","color":"Yellow","legs":4}

No Const Hoisting

用 const 关键字定义的变量不会提升到代码顶部。

在下面的示例中,在定义 const 变量 x 之前就对其进行了访问。它将导致一个错误。我们可以使用 try-catch 语句捕获该错误。

<html>
<body>
   <script>
      document.write(x);
	  const x = 10;
   </script>
</body>
</html>

以下是使用 const 关键字声明的变量的一些其他属性。

  1. Block scope.

  2. 它不能在同一作用域中重新声明。

  3. 使用 const 关键字声明的变量不能提升到代码顶部。

  4. 常量变量值是一个基本值。

Difference between var, let and const

我们给出了使用 var、let 和 const 关键字声明的变量之间的比较表。

Comparison basis

var

let

const

Scope

Function

Block

Block

Hoisted

Yes

No

No

Reassign

Yes

Yes

No

Redeclare

Yes

No

No

Bind This

Yes

No

No

Which should you use among var, let, and const?

  1. 对于块范围,您应使用 let 关键字。

  2. 如果您需要将常量引用分配给任何值,请使用 const 关键字。

  3. 当您需要在任何特定块(如循环、“if 语句”等)中定义变量,并且需要在块外但在函数内访问它时,您可以使用 var 关键字。

  4. 但是,您可以使用任何关键字来定义全局变量。

  5. 重新声明变量不是一个好习惯。因此,应尽量避免这样做,但如果有必要,可以使用 var 关键字。