当我们需要为了提高程序的可读性和可维护性的目的,要定义一些有限的可能性的常量时,就需要使用枚举了。在 JavaScript 中,以下是创建枚举的四种方式:
1. 使用对象
通过定义一个对象,我们可以实现基本的枚举功能。
const DAY_OF_WEEK = {
SUNDAY: 0,
MONDAY: 1,
TUESDAY: 2,
WEDNESDAY: 3,
THURSDAY: 4,
FRIDAY: 5,
SATURDAY: 6
}
在上面的示例中,我们定义了一个表示一周的每个星期几的枚举,我们将其赋值给一个名为 DAY_OF_WEEK 的常量。每个值都是一个实际的 JavaScript 变量,它们的值从 0 开始递增。这个对象是一个具有只读属性的 JavaScript 对象,它不允许重新定义值。
2. 使用类
另一种可行的方法是利用 ES6 中的类。
class DAY_OF_WEEK {
static SUNDAY = 0
static MONDAY = 1
static TUESDAY = 2
static WEDNESDAY = 3
static THURSDAY = 4
static FRIDAY = 5
static SATURDAY = 6
}
在上面的示例中,我们定义了一个名为 DAY_OF_WEEK 的类,并在其中作为其静态属性定义了每个星期几的常量。这种方式允许我们通过实例化该类来使用这些常量,并在创建时传递参数。
const myEnum = new DAY_OF_WEEK()
console.log(myEnum.SUNDAY) // 0
3. 使用Symbol
如果您想要创建完全不可变的枚举,则可以使用 Symbol(一种 ES6 中的新数据类型)来实现。
const DAY_OF_WEEK = {
SUNDAY: Symbol('Sunday'),
MONDAY: Symbol('Monday'),
TUESDAY: Symbol('Tuesday'),
WEDNESDAY: Symbol('Wednesday'),
THURSDAY: Symbol('Thursday'),
FRIDAY: Symbol('Friday'),
SATURDAY: Symbol('Saturday')
}
在上面的示例中,我们使用了 Symbol 来定义常量。每个常量都是一个唯一的 Symbol 实例,这使得我们可以确保在整个应用程序中不存在两个名称相同的常量。
4. 使用有限制的类(Frozen Class)
我们也可以使用 Object.freeze() 和 ES6 中的类来创建枚举。
class DAY_OF_WEEK {
constructor(name, value) {
this.name = name
this.value = value
Object.freeze(this)
}
toString(){
return this.name
}
}
const SUNDAY = new DAY_OF_WEEK('Sunday', 0)
const MONDAY = new DAY_OF_WEEK('Monday', 1)
const TUESDAY = new DAY_OF_WEEK('Tuesday', 2)
const WEDNESDAY = new DAY_OF_WEEK('Wednesday', 3)
const THURSDAY = new DAY_OF_WEEK('Thursday', 4)
const FRIDAY = new DAY_OF_WEEK('Friday', 5)
const SATURDAY = new DAY_OF_WEEK('Saturday', 6)
在上面的示例中,我们使用了 ES6 类来定义常量,同时在构造函数中使用 Object.freeze() 冻结了常量对象。任何试图更新这些常量对象的尝试都将失败,因为它们是不可变的。该类也覆盖了 toString() 方法,以便在需要时输出名称字符串。
值得注意的是,虽然这四种方式都可以创建枚举,但第一种方式比较常用。如果枚举的常量数量很少,且不需要将其包裹在类或函数中,那么使用对象可以很快地完成枚举的创建。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript中的创建枚举四种方式 - Python技术站