# 深入理解枚举类型
枚举类型是很多语言都拥有的类型,它用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。
# 数字枚举
当我们声明一个枚举类型是,虽然没有给它们赋值,但是它们的值其实是默认的数字类型,而且默认从0开始依次累加:
enum Direction {
Up,
Down,
Left,
Right
}
console.log(Direction.Up === 0); // true
console.log(Direction.Down === 1); // true
console.log(Direction.Left === 2); // true
console.log(Direction.Right === 3); // true
@前端进阶之旅: 代码已经复制到剪贴板
因此当我们把第一个值赋值后,后面也会根据第一个值进行累加:
enum Direction {
Up = 10,
Down,
Left,
Right
}
console.log(Direction.Up, Direction.Down, Direction.Left, Direction.Right); // 10 11 12 13
@前端进阶之旅: 代码已经复制到剪贴板
# 字符串枚举
枚举类型的值其实也可以是字符串类型:
enum Direction {
Up = 'Up',
Down = 'Down',
Left = 'Left',
Right = 'Right'
}
console.log(Direction['Right'], Direction.Up); // Right Up
@前端进阶之旅: 代码已经复制到剪贴板
# 异构枚举
既然我们已经有了字符串枚举和数字枚举,那么这两个枚举是不是可以混合使用呢?
enum BooleanLikeHeterogeneousEnum {
No = 0,
Yes = "YES",
}
@前端进阶之旅: 代码已经复制到剪贴板
是的,这样也是没问题的,通常情况下我们很少会这样使用枚举,但是从技术的角度来说,它是可行的。
# 反向映射
我们看一个例子:
enum Direction {
Up,
Down,
Left,
Right
}
console.log(Direction.Up === 0); // true
console.log(Direction.Down === 1); // true
console.log(Direction.Left === 2); // true
console.log(Direction.Right === 3); // true
@前端进阶之旅: 代码已经复制到剪贴板
这就是我们数字枚举那一部分的例子,我们可以通过枚举名字获取枚举值,这当然看起来没问题,那么能不能通过枚举值获取枚举名字呢?
是可以的:
