返回

JS ES5 如何通过 Object.defineProperty 定义常量?🎃

前端

引言

在 JavaScript ES5 中,使用 var 声明的变量是可变的,这意味着它们的值可以被重新分配。然而,有时我们希望创建一个变量,其值在创建后不能被改变。这种变量称为常量。

使用 Object.defineProperty() 方法定义常量

在 ES5 中,可以使用 Object.defineProperty() 方法来定义常量。Object.defineProperty() 方法允许您为对象添加或修改属性,包括将其设置为常量。

要使用 Object.defineProperty() 方法定义常量,您需要传递三个参数:

  • 对象:要向其添加常量属性的对象。
  • 属性名称:常量属性的名称。
  • 属性符:一个对象,了常量属性的特性。

属性描述符可以包含以下属性:

  • value:常量属性的值。
  • writable:一个布尔值,指示常量属性的值是否可以被重新分配。
  • enumerable:一个布尔值,指示常量属性是否可以在 for...in 循环中被枚举。
  • configurable:一个布尔值,指示常量属性的特性是否可以被修改。

要定义一个常量,您需要将 writable 属性设置为 false。这将防止对常量的值进行重新分配。

以下示例演示如何使用 Object.defineProperty() 方法定义一个常量:

const object = {};

Object.defineProperty(object, "name", {
  value: "John Doe",
  writable: false,
  enumerable: true,
  configurable: false
});

console.log(object.name); // John Doe

object.name = "Jane Doe";

console.log(object.name); // John Doe

在上面的示例中,我们使用 Object.defineProperty() 方法向 object 对象添加了一个名为 name 的常量属性。我们将其 writable 属性设置为 false,以防止对该属性的值进行重新分配。

使用 const 定义常量

在 ES6 中,引入了 const 关键字来定义常量。const 关键字与 var 关键字非常相似,但它不允许您重新分配常量值。

以下示例演示如何使用 const 关键字定义一个常量:

const name = "John Doe";

console.log(name); // John Doe

name = "Jane Doe";

console.log(name); // Uncaught TypeError: Assignment to constant variable.

在上面的示例中,我们使用 const 关键字定义了一个名为 name 的常量。当我们尝试重新分配 name 的值时,我们会收到一个错误。

比较 Object.defineProperty() 方法和 const 关键字

Object.defineProperty() 方法和 const 关键字都可以用来定义常量。然而,两者之间存在一些关键差异:

  • Object.defineProperty() 方法允许您为现有对象添加常量属性,而 const 关键字只能用于声明新的常量。
  • Object.defineProperty() 方法允许您自定义常量属性的特性,而 const 关键字不会允许您这样做。
  • Object.defineProperty() 方法在 ES5 中可用,而 const 关键字在 ES6 中引入。

结论

在 JavaScript ES5 中,可以使用 Object.defineProperty() 方法来定义常量。Object.defineProperty() 方法允许您为对象添加或修改属性,包括将其设置为常量。要定义一个常量,您需要将 writable 属性设置为 false

在 ES6 中,引入了 const 关键字来定义常量。const 关键字与 var 关键字非常相似,但它不允许您重新分配常量值。