枚舉是組織收集有關(guān)聯(lián)變量的一種方式,使用枚舉我們可以定義一些帶名字的常量凡桥,像 C# 和 Java 都有枚舉數(shù)據(jù)類型,TypeScript 將枚舉類型引進(jìn)到了 JavaScript 中耍攘。
數(shù)字枚舉
枚舉類型的值是數(shù)字類型奉呛,因此它們被稱為數(shù)字類型枚舉,成員的值可以不用初始化珊搀,因為具有自增行為厅须。
// 默認(rèn)自增
enum Person {
name,
age,
love,
hobby
}
console.log(Person.name); // 0
console.log(Person.hobby); // 3
// 可人為自行修改
enum Person {
name = 4,
age = 3,
love = 2,
hobby = 1
}
console.log(Person.name); // 4
console.log(Person.hobby); // 1
數(shù)字枚舉的反向映射
數(shù)字枚舉成員還具有 反向映射 的特性,從枚舉值到枚舉名字食棕,要注意的是 不會為字符串枚舉成員生成反向映射朗和。
enum Person {
name,
age,
love,
hobby
}
console.log(Person[Person.love]); // love
字符串枚舉
在一個字符串枚舉里,每個成員都必須用字符串字面量簿晓,或另外一個字符串枚舉成員進(jìn)行初始化眶拉。
enum Person {
name = 'NAME',
age = 'AGE',
love = 'LOVE',
hobby = 'HOBBY'
}
console.log(Person.name); // NAME
console.log(Person.hobby); // HOBBY
異構(gòu)枚舉
枚舉可以混合字符串和數(shù)字成員,但一般沒必要這么做憔儿。
enum Person {
name = 1,
age = 2,
love = 'LOVE',
hobby = 'HOBBY'
}
console.log(Person.name); // 1
console.log(Person.hobby); // HOBBY
常量枚舉
常量枚舉通過在枚舉上使用 const 修飾符來定義忆植,常量枚舉不同于常規(guī)的枚舉,他們會在編譯階段被刪除谒臼。
const enum Size {
WIDTH = 10,
HEIGHT = 20
}
const area = Size.WIDTH * Size.HEIGHT; // 200
常量枚舉成員在使用的地方會被內(nèi)聯(lián)進(jìn)來朝刊,之所以可以這么做是因為,常量枚舉不允許包含計算成員蜈缤;如上例所示拾氓,在運(yùn)行時是沒有 Size
變量的,因此常量枚舉會帶來一個對性能的提升底哥。