# 枚举
- 如何定义一个枚举
```
enum 枚举名{
枚举字段1 = 值1,
枚举字段2 = 值2,
...
}
```
> 枚举会出现在编译结果中,编译结果中表现为对象。
# 枚举的规则
– 枚举的字段值可以是字符串或数字
– 数字枚举的值会自动自增
– 被数字枚举约束的变量,可以直接赋值为数字
– 数字枚举的编译结果 和 字符串枚举有差异
# 最佳实践
– 尽量不要再一个枚举中即出现字符串字段,又出现数字字段
– 使用枚举时,尽量使用枚举字段的名称,而不使用真实的值
## 扩展知识: 位枚举(枚举的位运算)
针对的数字枚举
位运算: 两个数字换算成二进制后进行的运算
```
enum Permission {
Read = 1, // 2^0 0001
Write = 2, // 2^1 0010
Create = 4, // 2^2 0100
Delete = 8 // 2^3 1000
}
// 1. 如何组合权限
// 使用 | 运算符(二进制按位判断)
let p: Permission = Permission.Read | Permission.Write;
// 2. 如何判断是否拥有某个权限
// 使用 & 运算符
function hasPermission(target: Permission, per: Permission){
return (target & per) === per;
}
// 判断变量p是否拥有可读权限
console.log(hasPermission(p, Permission.Delete));
// 3. 如何删除某个权限
// 使用 异或 运行符
p = p ^ Permission.Write;
console.log(hasPermission(p, Permission.Write));
```