在JavaScript目前的版本中,沒有枚舉這個概念(固然,ECMA-262第三版中已經將enum做爲關鍵字保留)。
然而,如同JavaScript中沒有class同樣,但咱們仍然能夠經過間接的方式——JSON來實現它。
以下,咱們來定義Week的枚舉: if(typeof WeekDay == "undefined"){ var WeekDay = {}; WeekDay.Sunday = 0; WeekDay.Monday = 1; WeekDay.Tuesday = 2; WeekDay.Wedesay = 3; WeekDay.Thursday = 4; WeekDay.Friday = 5; WeekDay.Saturday = 6; } 測試以下: alert(WeekDay.Monday); // -----> Output: 1 固然,咱們有更爲直觀的方式。以定義DOM文檔節點類型爲例,定義方式以下: if(typeof Node == "undefined"){ var Node = { ELEMENT_NODE: 1, ATTRIBUTE_NODE: 2, TEXT_NODE: 3, CDATA_SECTION_NODE: 4, ENTITY_REFERENCE_NODE: 5, ENTITY_NODE: 6, PROCESSING_INSTRUCTION_NODE: 7, COMMENT_NODE: 8, DOCUMENT_NODE: 9, DOCUMENT_TYPE_NODE: 10, DOCUMENT_FRAGEMENT_NODE: 11, NOTATION_NODE: 12 } }
測試以下:node
alert(document.nodeType == Node.DOCUMENT_NODE); // -----> Output: true瀏覽器
說明,以上Node定義可做爲糾正IE不支持DOM節點類型常量用(其餘主流瀏覽器均支持)。測試
與類C語言相似,以上2個例子的枚舉對應屬性值均爲整形。你可能想到,難道還能定義成別的類型?spa
要回答這個問題,得先知道我們這個枚舉實現的原理。前面說到,這裏是用JSON來實現的,而JSON能夠使用任何類型的值!code
因此,Js中的枚舉能夠是任何類型的值。如下以String類型爲例:blog
if(typeof Color == "undefined"){
var Color = {
Color1: 'red',
Color2: 'green',
Color3: 'white',
Color4: 'black'
}
}ip
測試以下:文檔
alert(Color.Color1); // -----> Output: redit
以更爲複雜的類型來定義一個PersonList枚舉以下:class
if(typeof PersonList == "undefined"){ var PersonList = { ZhangSan: { Id: 1, Name: 'ZhangSan', Gender: 'man' }, LiSi: { Id: 2, Name: 'LiSi', Gender: 'woman' }, ZhaoWu: { Id: 3, Name: 'ZhaoWu', Gender: 'man' } } }