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'
                }
            }
        }


原文鏈接:JavaScript中的枚舉應(yīng)用