在JavaScript目前的版本中,没有枚举这个概念(当然,ECMA-262第三版中已经将enum作为关键字保留)。然而,如同JavaScript中没有class一样,但我们仍然可以通过间接的方式——JSON来实现它。

如下,我们来定义Week的枚举:

if(typeof WeekDay == "undefined"){
var
            WeekDay.Sunday = 0;
            WeekDay.Monday = 1;
            WeekDay.Tuesday = 2;
            WeekDay.Wedesay = 3;
            WeekDay.Thursday = 4;
            WeekDay.Friday = 5;
            WeekDay.Saturday = 6;
        }
测试如下:
// -----> Output: 1

当然,我们有更为直观的方式。以定义DOM文档节点类型为例,定义方式如下:

if(typeof Node == "undefined"){
var
                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
            }
        }

测试如下:

// -----> Output: true

说明,以上Node定义可作为纠正IE不支持DOM节点类型常量用(其他主流浏览器均支持)。


 

与类C语言类似,以上2个例子的枚举对应属性值均为整形。你可能想到,难道还能定义成别的类型?要回答这个问题,得先知道咱们这个枚举实现的原理。前面说到,这里是用JSON来实现的,而JSON可以使用任何类型的值!所以,Js中的枚举可以是任何类型的值。以下以String类型为例:

if(typeof Color == "undefined"){
var
'red',
'green',
'white',
'black'
            }
        }

测试如下:

// -----> Output: red


 

以更为复杂的类型来定义一个PersonList枚举如下:

if(typeof PersonList == "undefined"){
var
                ZhangSan: {
                    Id: 1,
'ZhangSan',
'man'
                },
                LiSi: {
                    Id: 2,
'LiSi',
'woman'
                },
                ZhaoWu: {
                    Id: 3,
'ZhaoWu',
'man'
                }
            }
        }

测试结果如下图:


js里面如何使用Java当中的枚举才不报not defined javascript枚举_ViewUI

                

js里面如何使用Java当中的枚举才不报not defined javascript枚举_javascript_02