当前位置: 移动技术网 > IT编程>开发语言>JavaScript > 3.typescript的数据类型-枚举(enum)

3.typescript的数据类型-枚举(enum)

2020年07月17日  | 移动技术网IT编程  | 我要评论

1.枚举初识

默认情况下,枚举是从0开始的,后面的值依次递增,它们当中的每个值都可以显示指定,只要不出现重复即可,没有被显示指定的值,会以前一个值为基础递增得到

enum Color {
	red,
	yellow,
	green
}
let c: Color = Color.red // 1
let str:string = Color[1] // yellow,这个写法不太友好
let str1:string = Color[Color.green] // green,推荐使用
console.log(Color['red'] === 0) //true
console.log(Color['yellow'] === 1) //true
console.log(Color[0] === 'red') //true
console.log(Color[1] === 'yellow') //true
  • 以上代码对应的js代码为
var Color;
(function (Color) {
    Color[Color["red"] = 0] = "red";
    Color[Color["blue"] = 1] = "blue";
    Color[Color["green"] = 2] = "green";
})(Color || (Color = {}));

2.常量枚举

常数枚举与普通枚举的区别是,它会在编译阶段被删除,并且不能包含计算成员,假如包含了计算成员,则会在编译阶段报错

const enum Color {
	red,
	yellow,
	green
}
let str:Color = Color.yellow

编译后的js代码为

var str = 1

为什么编译后的js代码只剩一行了呢?

  • 直接内联此枚举项的值
  • 不再为常量枚举类型生成对应的js代码

我们还需要注意的是:常量枚举不能使用Color[1]或者Color[Color.red]这样的语法来获取枚举项字符串名称了,因为常量枚举没有生成对应枚举项的代码

3.枚举项默认值

1.首个枚举项的默认值设置为1,为什么呢?

我们都知道首个枚举项的默认值是0,但是在js中0代表false,如果想要判断某个枚举值是否存在,难道我们每次都要先判断是不是typeof (Color.red) === 'undefined’吗?为了避免这种情况,我们把首个枚举项设置为1,然后后续的枚举项以1为基础递增,消除了0的情况

enum Color {
	red = 1,
	yellow,
	green
}

2.不建议为枚举项设置字符串数据类型

enum Color {
	red,
	green,
	blue = 'blue color'
}

编译后的js代码为

var Color;
(function (Color) {
    Color[Color["red"] = 0] = "red";
    Color[Color["green"] = 1] = "green";
    Color["blue"] = "blue color";
})(Color || (Color = {}));

会发现,我们不能使用Color[Color.blue]来获取枚举项的对应的名称了

如果我们这样写

enum Color {
	red,
	green = 'green color',
	blue // error: Enum member must have initializer
}

ts会直接报错,因为green后续的枚举项无法根据’green color’这个字符串进行递增

本文地址:https://blog.csdn.net/qq_35629054/article/details/107383106

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网