JavaScript中的枚舉

在JavaScript目前的版本中,沒有枚舉這個概念(固然,ECMA-262第三版中已經將enum做爲關鍵字保留)。
然而,如同JavaScript中沒有class同樣,但咱們仍然能夠經過間接的方式——JSON來實現它。node

以下,咱們來定義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
}
}ip

  
    測試以下:
alert(document.nodeType == Node.DOCUMENT_NODE); // -----> Output: true文檔

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

與類C語言相似,以上2個例子的枚舉對應屬性值均爲整形。你可能想到,難道還能定義成別的類型?
   要回答這個問題,得先知道我們這個枚舉實現的原理。前面說到,這裏是用JSON來實現的,而JSON能夠使用任何類型的值!
   因此,Js中的枚舉能夠是任何類型的值。如下以String類型爲例:class

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

相關文章
相關標籤/搜索