JavaScript中的枚舉應(yīng)用
在JavaScript目前的版本中,沒有枚舉這個(gè)概念(當(dāng)然,ECMA-262第三版中已經(jīng)將enum作為關(guān)鍵字保留)。
然而,如同JavaScript中沒有class一樣,但我們?nèi)匀豢梢酝ㄟ^間接的方式——JSON來實(shí)現(xiàn)它。
如下,我們來定義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 當(dāng)然,我們有更為直觀的方式。以定義DOM文檔節(jié)點(diǎn)類型為例,定義方式如下: 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 } } 測試如下: alert(document.nodeType == Node.DOCUMENT_NODE); // -----> Output: true 說明,以上Node定義可作為糾正IE不支持DOM節(jié)點(diǎn)類型常量用(其他主流瀏覽器均支持)。 與類C語言類似,以上2個(gè)例子的枚舉對(duì)應(yīng)屬性值均為整形。你可能想到,難道還能定義成別的類型? 要回答這個(gè)問題,得先知道咱們這個(gè)枚舉實(shí)現(xiàn)的原理。前面說到,這里是用JSON來實(shí)現(xiàn)的,而JSON可以使用任何類型的值! 所以,Js中的枚舉可以是任何類型的值。以下以String類型為例: if(typeof Color == "undefined"){ var Color = { Color1: 'red', Color2: 'green', Color3: 'white', Color4: 'black' } } 測試如下: alert(Color.Color1); // -----> Output: red 以更為復(fù)雜的類型來定義一個(gè)PersonList枚舉如下: 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' } } }