JavaScript中的枚舉


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

   

    測試如下:

       alert(document.nodeType == Node.DOCUMENT_NODE);  // -----> Output: true

 
         

    說明,以上Node定義可作為糾正IE不支持DOM節點類型常量用(其他主流瀏覽器均支持)。

 
         

  與類C語言類似,以上2個例子的枚舉對應屬性值均為整形。你可能想到,難道還能定義成別的類型?

   要回答這個問題,得先知道咱們這個枚舉實現的原理。前面說到,這里是用JSON來實現的,而JSON可以使用任何類型的值!

   所以,Js中的枚舉可以是任何類型的值。以下以String類型為例:

 
         

        if(typeof Color == "undefined"){
            var Color = {
                Color1: 'red',
                Color2: 'green',
                Color3: 'white',
                Color4: 'black'
            }
        }

  測試如下:

        alert(Color.Color1);  // -----> Output: red

  以更為復雜的類型來定義一個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'
                }
            }
        }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM