• 枚举类型


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

    数字枚举-枚举值会递增,并采用反向映射的原理
    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
    
  • 相关阅读:
    ArchLinux新版本(pacstrap安装)及国内较优源推荐
    [转载]打造自己喜欢的Linux桌面----archlinux
    ArchLinux下LXDE的安装与设置心得
    [转载]linux 文件改名,移动
    SaaS(软件即服务)架构设计
    临时表空间
    DTCMS自定义标签,获取所有栏目以及获得二级子栏目导航
    Druid简介
    jeecg 模糊查询
    JEECG中的模糊查询
  • 原文地址:https://www.cnblogs.com/xfxing/p/12652073.html
Copyright © 2020-2023  润新知