Typescript-入门(三)-枚举及枚举位运算

98 阅读1分钟

一、枚举

枚举(Enum)是一种用于命名一组命名常数的数据类型,用enum定义。枚举通过为每个常数赋予一个有意义的名字,可以提高代码的可读性和可维护性。

枚举的规则

  • 枚举可以是数字或字符串
  • 数字枚举的值会自动自增
    • 即使不定义枚举值,枚举也会默认第一个赋值为0,后面依次递增
  • 被数字枚举约束的变量,可以直接赋值为数字
  • 数字枚举的编译结果 和 字符串枚举有差异
  • 枚举是参与编译的,即最终编译时,会被打包进去
    • 所以枚举是可以进行遍历的
enum Gender {
    man = '男',
    woman = '女'
}

const man:Gender = Gender.man

Object.keys(Gender).forEach(item=>console.log(item))

image.png

二、枚举的位运算

enum Permission {
    Read = 1,   // 0001
    Write = 2,  // 0010
    Create = 4, // 0100
    Delete = 8  // 1000
}

//1. 如何组合权限
//使用或运算
//0001
//或
//0010
// 有1取1,没有取0
//0011
let p: Permission = Permission.Read | Permission.Write;

//2. 如何判断是否拥有某个权限
//0011
//且
//0010
// 都存在1,则取1,反之取0
//0010
function hasPermission(target: Permission, per: Permission) {
    return (target & per) === per;
}
//判断变量p是否拥有可读权限

//3. 如何删除某个权限
//0011
//异或
//0010
// 都存在1取0,若仅存在1,则取0,其余取0
//0001
p = p ^ Permission.Write;
console.log(hasPermission(p, Permission.Write));