JavaScript 枚举

JavaScript 枚举

JavaScript中的枚举 用于表示一组固定的命名值。它们允许开发人员定义一系列命名常量,这些常量可以在整个代码库中使用,以提高代码的可读性、可维护性并防止错误。

在JavaScript中,枚举或枚举类型用于表示一组固定的命名值。然而,JavaScript本身不支持原生的枚举类型,所以通常使用对象或冻结的数组来实现。

为确保JavaScript中枚举的不可变性,您可以遵循以下准则:

Object.freeze()方法: 创建类似枚举的对象的一种方法是定义一个纯JavaScript对象,该对象具有常量属性值,然后使用 Object.freeze() 方法防止进一步修改。这将确保该对象及其属性无法被更改或修改。您可以使用Object.freeze() 方法来防止对对象的任何更改。一旦对象被冻结,您就无法添加、修改或删除其任何属性。您可以使用此方法来创建表示枚举的不可变对象。

语法:

Object.freeze()

使用Object.defineProperty()方法: 您可以使用Object.defineProperty()方法定义无法更改、添加或删除的属性。您可以使用此方法为每个枚举值创建一个只读属性。您可以使用Object.defineProperty()方法定义无法更改、添加或删除的属性。您可以使用此方法为每个枚举值创建一个只读属性。

使用TypeScript TypeScript是JavaScript的超集,包含对枚举的支持。使用TypeScript,您可以以确保其不可变性的方式定义枚举。

示例1: 在此示例中,我们将看到如何使用Object.freeze()方法。

Javascript

const DaysOfWeek = Object.freeze({ 
    SUNDAY: 0, 
    MONDAY: 1, 
    TUESDAY: 2, 
    WEDNESDAY: 3, 
    THURSDAY: 4, 
    FRIDAY: 5, 
    SATURDAY: 6 
}); 
  
// Try to modify the enum 
// This will not change the Sunday variable 
DaysOfWeek.SUNDAY = 7;  
console.log(DaysOfWeek.SUNDAY);

输出:

0

在这个例子中,我们使用Object.freeze()方法创建了一个名为DaysOfWeek的Enum对象。Object.freeze()方法使对象不可变,所以我们无法向对象添加、修改或删除属性。

ES6 Symbol 在JavaScript中创建Enum的另一种方法是使用ES6 Symbols。Symbols是唯一的标识符,不能重复使用,可以用来定义保证独特且不变的常量值。

例子: 以下是使用ES6 Symbols定义enum的示例

JavaScript

const myEnum = Object.freeze({ 
    FOO: Symbol('foo'), 
    BAR: Symbol('bar'), 
    BAZ: Symbol('baz') 
}); 
  
console.log(myEnum.FOO); // Symbol(foo) 
  
// Attempting to modify the enum 
// values will have no effect 
myEnum.FOO = Symbol('newFoo'); 
console.log(myEnum.FOO); // Symbol(foo) 
  
// Adding a new property to the enum 
// object will also have no effect 
myEnum.QUX = Symbol('qux'); 
console.log(myEnum.QUX); // undefined

输出:

Symbol(foo)
Symbol(foo)
undefined

在这个例子中,我们使用Object.freeze()来定义一个名为myEnum的枚举,以防止对该对象的任何修改。我们使用Symbol()为每个枚举值创建唯一的符号。

使用闭包: 您还可以使用闭包来创建一个枚举。闭包是一个函数,它可以访问外部函数范围内的变量。通过创建一个返回值的内部函数,我们可以使外部函数范围内的变量只读。

例子: 在这个例子中,我们将使用闭包。

Javascript

const DaysOfWeek = (function () { 
    const days = { 
        SUNDAY: 0, 
        MONDAY: 1, 
        TUESDAY: 2, 
        WEDNESDAY: 3, 
        THURSDAY: 4, 
        FRIDAY: 5, 
        SATURDAY: 6 
    }; 
    return { 
        get: function (name) { 
            return days[name]; 
        } 
    }; 
})(); 
  
// Try to modify the enum 
// This will not have any effect 
DaysOfWeek.SUNDAY = 7;  
console.log(DaysOfWeek.get('SUNDAY')); // Output: 0

输出:

0

在这个例子中,我们使用一个闭包来创建一个名为DaysOfWeek的对象。 days对象在外部函数作用域中定义,并且无法从函数外部访问。内部函数get返回days对象的具有给定名称的属性的值。由于days对象不能直接访问,因此无法从闭包外部修改它。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程