3.typescript的数据类型-枚举(enum)
程序员文章站
2022-03-21 19:40:13
1.枚举初识默认情况下,枚举是从0开始的,后面的值依次递增,它们当中的每个值都可以显示指定,只要不出现重复即可,没有被显示指定的值,会以前一个值为基础递增得到enum Color {red,yellow,green}let c: Color = Color.red // 1let str:string = Color[1] // yellow,这个写法不太友好let str1:string = Color[Color.green] // green,推荐使用console.log(...
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