一签餐、枚舉類(lèi)型介紹
1、枚舉類(lèi)型
如果接觸過(guò)其它語(yǔ)言或者TypeScript盯串,大概對(duì)于枚舉類(lèi)型有一些了解氯檐。枚舉類(lèi)型是什么,在計(jì)算機(jī)學(xué)術(shù)界的定義繁奧且復(fù)雜体捏,具體請(qǐng)參考百度百科-枚舉冠摄,在這里我將其定義理解為:枚舉是一種定義成員與值的映射關(guān)系的有窮序列集的數(shù)據(jù)類(lèi)型。當(dāng)然几缭,在實(shí)際應(yīng)用中能夠?qū)ζ淅斫獾母由钊搿?/p>
2河泳、ECMAScript中的枚舉類(lèi)型
在ECMAScript2015標(biāo)準(zhǔn)中尚未實(shí)現(xiàn)支持原生的枚舉類(lèi)型,但enum
一直作為一個(gè)保留關(guān)鍵字而存在年栓,將來(lái)有望實(shí)現(xiàn)原生支持拆挥。但是TypeScript作為JavaScript的超集,提前實(shí)現(xiàn)了對(duì)枚舉類(lèi)型的語(yǔ)法支持。下面的實(shí)例均是以TypeScript語(yǔ)法為例的纸兔。
3惰瓜、枚舉類(lèi)型的特性
(1)自增性
enum Direction {
Up,
Down
}
console.log(Direction[0]); // 輸出結(jié)果“Up”
console.log(Direction[1]); // 輸出結(jié)果“Down”
注釋?zhuān)喝绻粚?duì)成員進(jìn)行初始化賦值,則其值將會(huì)從0開(kāi)始自動(dòng)遞增汉矿。這種特性在實(shí)際運(yùn)用中是非常有用的崎坊。
(2)映射性
enum Direction {
Up,
Down = "下"
}
console.log(Direction.Up); // 輸出結(jié)果0
console.log(Direction[0]); // 輸出結(jié)果0
console.log(Direction.Down); // 輸出結(jié)果1
console.log(Direction["下"]); // 輸出結(jié)果undefined
注釋?zhuān)涸赥ypescript中,字符串枚舉并不具有相互映射的特性洲拇。目前還尚不清楚為什么Typescript不支持這種特性奈揍,但我仍然認(rèn)為它十分有用,比如在進(jìn)行文本國(guó)際化的時(shí)候赋续。
4男翰、在JavaScript中使用枚舉
由于ECMAScript不提供對(duì)Enum類(lèi)型的原生支持,所以理所當(dāng)然JavaScript也不支持Enum類(lèi)型蚕捉,但JavaScript卻可以模擬出類(lèi)似的特性來(lái)奏篙,請(qǐng)看下面示例:
var Direction = {
left: 0,
right: 1,
top: "上",
bottom: "下",
0: left,
1: right,
上: "top",
下: "bottom"
};
console.log(Direction.left); // 輸出結(jié)果為:0,
console.log(Direction[0]); // 輸出結(jié)果為:"left"
console.log(Direction["上"]); // 輸出結(jié)果為:"top"
console.log(Direction["下"]); // 輸出結(jié)果為:"bottom"
上述示例中的Direction對(duì)象就可以視作一個(gè)Enum類(lèi)型迫淹。