枚举—enum

  • html

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>枚举</title>
        <script src="enum.js"></script>
    </head>
    <body>
    </body>
</html>
  • ts

//枚举:用于取值被限定在某个范围内的场景,如:一周7天,三原色为红绿蓝
enum Weeks {//注意:enum关键字类似class,weeks后面不是={},没有=;let const 定义变量时才有
    Sunday,
    Monday,
    Tuesday,
    Wednestday,
    Thursday,
    Friday,
    Saturday
}
//1 枚举值没有给默认值时,默认值从0开始递增,这里为0-6
console.log(Weeks['Sunday'],Weeks['Monday'],Weeks['Tuesday'],Weeks['Wednestday'],Weeks['Thursday'],Weeks['Friday'],Weeks['Saturday']);

//2 上面是读取成员的值,还可以通过成员的值反向读取成员名
console.log(Weeks[0]);//Sunday

//3 枚举成员一旦定义好则 值 不可更改,因为成员都是只读属性
// weeks['Sunday'] = 9;//error

//4 可在定义时进行手动赋值
enum ColorTest {
    RED,
    GREEN = 6,//只指定一个值,则后面的依次递增,BLUE为7,RED还是0
    BLUE
}
console.log(ColorTest['RED'],ColorTest['GREEN'],ColorTest['BLUE']);//0 6 7

//5 枚举成员不止可以为数字--通过测试:数字、字符串OK;boolean、objeck、null、undefined不行
enum TypeNum {
    One = 2,
    Two = '字符',
    Three = '如果前面一个不是number类型,后面的成员必须手动设置值',
    Four = 'a'
}
//5.1 通过成员值反向获取时,目前只发现number类型的可以
console.log(TypeNum[2]);//One
console.log(TypeNum['字符']);//undefined
console.log(TypeNum['a']);//undefined
console.log('five:'+TypeNum['Five']);
//5.2 可以通过类型断言<any>设置上面所测试出来不能的类型值,如boolean
enum Days {Sunday = 1, Mon=<any>true};//只能通过any类型,不能用boolean或其他的,且类型断言之前的成员只能是number类型
// enum Days2 {Sunday = '1' Mon = <any>true};//error:且前面的成员不能有字符串
// enum Days2 {Sunday = <any>'1' Mon = <any>true};//error:这样也不行

//6 枚举成员的值可以相同
enum SameNum {
    Num1 = 3,
    Num2 = 2,
    Num3
}
console.log(SameNum['Num1'],SameNum['Num3']);//上面的Num1和Num3值都为3
//6.1 这个时候反向读取有个问题需注意:SameNum(3)这个值本来为Num1,后来被Num3给覆盖了,所以为Num3
console.log(SameNum[3]);//Num3--尽量避免这种值相同的情况

//7 手动赋值可以为 负数 或 小数
enum TestNum {
    Num1 = -1,
    Num2 = -0.5,
    Num3
}
console.log(TestNum['Num1'],TestNum['Num2'],TestNum['Num3']);//-1 -0.5 0.5

//8 枚举访问方式2
console.log(TestNum.Num1);
// console.log(TestNum.-1);//error

//9 常数项和计算所得项
//9.1 上面的都是常数项
//9.2 计算所得项
enum Item {
    One,
    //Length = 'hello'.length,//计算所得项
    Last = 'f'//计算所得项后面的成员需要手动赋值,不知道为什么导致上面报错,但可以运行
}
console.log(Item['Last']);//f

//10 常数枚举:const enum 常数枚举与普通枚举的区别是,它会在编译阶段被删除,并且不能包含计算成员
const enum Directions {
    Up,
    Down,
    Left,
    // Right = 'hello'.length //常数枚举中不能有计算所得项
}
console.log(Directions.Up,Directions.Down,Directions.Left);

//11 外部枚举(Ambient Enums)是使用 declare enum 定义的枚举类型:
declare enum Directions2 {
    Up,
    Down,
    Left,
    Right
}

let directions2 = [Directions2.Up, Directions2.Down, Directions2.Left, Directions2.Right];
// 之前提到过,declare 定义的类型只会用于编译时的检查,编译结果中会被删除。
// 上例的编译结果是:
var directions22 = [Directions2.Up, Directions2.Down, Directions2.Left, Directions2.Right];
// 外部枚举与声明语句一样,常出现在声明文件中。
// 同时使用 declare 和 const 也是可以的:
declare const enum Directions3 {
    Up,
    Down,
    Left,
    Right
}

let directions3 = [Directions3.Up, Directions3.Down, Directions3.Left, Directions3.Right];

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值