枚举类型

Posted xfxing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了枚举类型相关的知识,希望对你有一定的参考价值。

枚举是一组有名字的常量集合

数字枚举-枚举值会递增,并采用反向映射的原理
enum Role {
  Reporter = 2,
  Developer,
  Maintainer,
  Owner,
  Guest
}
console.log(Role.Reporter) // 2
console.log(Role[4]) // Maintainer
console.log(Role) // =>
// [2: "Reporter"
// 3: "Developer"
// 4: "Maintainer"
// 5: "Owner"
// 6: "Guest"
// Developer: 3
// Guest: 6
// Maintainer: 4
// Owner: 5
// Reporter: 2]
字符串枚举-编译结果显示只有成员名称作为key,所以它不能进行反向映射的
enum Message {
  Success = ‘成功‘,
  Fail = ‘失败‘
}
异构枚举-数字枚举和字符串枚举混用的结果,容易引起混淆,不建议使用
enum Answer {
  N,
  Y = ‘yes‘
}

枚举成员

枚举成员的值是只读类型,定义后不能修改。

1.const member(常量枚举),包括三种情况:没有初始值的情况、对已有枚举成员的引用、常量的表达式,常量枚举成员会在编译的时候计算结果,然后以常量的形式出现在运行时环境。

enum Char {
  a,
  b = Char.a,
  c = 1 + 4
}

2.computed member,指需要被计算的枚举成员,是一些非常量的表达式,这些枚举成员的值不会在编译阶段计算,而是在程序执行阶段计算。

enum Char {
  d = Math.random(),
  e = ‘123‘.length,
  f // 提示错误
}

PS:
  特别注意:在computed member后的成员一定要赋给初始值,否则会提示错误

常量枚举

特性:会在编译阶段被移除
作用:当我们不需要一个对象,而需要这个对象的值时,就需要使用常量枚举,这样减少在编译环境的代码

const enum Month {
  Jan,
  Feb,
  Mar
}
let month = [Month.Jan, Month.Feb, Month.Mar]

PS:
  会被编译成:
  var month = [0 /* Jan */, 1 /* Feb */, 2 /* Mar */];

枚举类型

在某些情况下,枚举和枚举成员都可以作为一种单独类型存在。
第一种情况,枚举成员没有任何初始值;
第二种情况,所有成员都是数字枚举;
第三种情况,所有成员都是字符串枚举。

enum E { a, b }
enum F { a = 0, b = 1 }
enum G { a = ‘apple‘, b = ‘banana‘ }

对于第一种和第二种情况,可以把任意的number类型赋值给枚举类型,它的取值也可以超出枚举成员的定义,但是两种不同类型的枚举不能进行比较:

let e: E = 3
let f: F = 3
// console.log(e === f) // 提示错误


let e1: E.a = 1
let e2: E.b
// console.log(e1 === e2) // 提示错误
let e3: E.a = 1
console.log(e1 === e3) // true

而第三种情况字符串枚举的取值只能是枚举成员的类型

let g1: G = G.a
let g2: G.a = G.a

以上是关于枚举类型的主要内容,如果未能解决你的问题,请参考以下文章

Java 枚举类的基本使用

C/C++ 中enum枚举量的介绍:介绍enum枚举量在C/C中的作用和使用方法

Java中枚举的写法和用法

JAVA String类型如何 转 枚举类型,最好有点代码可得清楚点

在代码片段中包含类型转换

使用代码段遍历,枚举类型Enum