2017-07-28 148 views
1

我們可以在Javascript中創建「枚舉」如下:枚舉使用空對象

var MyEnum = { 
    A: 0, 
    B: 1, 
} 

我可以使用空對象而不是數字如下?

var MyEnum = { 
    A: {}, 
    B: {}, 
} 

有什麼區別,應該用什麼?沒有任何具體的用例。

+2

它取決於...的目的。請在問題中添加更多的上下文。 –

+1

是的;不同的是,第一件事是數字,第二件事是對象。很難說出你究竟在問什麼。你有沒有嘗試過使用對象?你有特定的困難嗎? – Xufox

+0

「我們可以在Javascript中創建Enums如下」 - 不,你不能。 – Quentin

回答

0

我在編輯之後更改了我的答案,因爲剛剛注意到您正在嘗試。

是的,你可以使用對象作爲枚舉值沒有任何問題。當您在對象中定義{}時,它會創建並清空具有唯一引用的對象。

{} != {}將不相等,因爲具有相同的兩個不同對象並不意味着它們是相同的對象。你有兩個紅球,這些球是同一個球嗎?

instance.type == MyEnum.ObjectEnum1將始終爲真。 因爲實例和MyEnum對象共享對該對象的相同引用。

var MyEnum = { 
 
    A: 1, 
 
    B: 2, 
 
    C: 3, 
 
    ObjectEnum1: {}, 
 
    ObjectEnum2: {} 
 
} 
 

 
var obj1 = { 
 
\t type: MyEnum.B 
 
} 
 

 
var obj2 = { 
 
\t type: MyEnum.C 
 
} 
 

 
var obj3 = { 
 
\t type: MyEnum.ObjectEnum1 
 
} 
 

 

 
console.log(obj1.type == MyEnum.B); //Should be true 
 
console.log(obj2.type == MyEnum.A); //Should be false 
 
console.log(obj2.type == MyEnum.C); //Should be true 
 

 

 
console.log(obj3.type == MyEnum.ObjectEnum1); //Should be true 
 
console.log(obj3.type == MyEnum.ObjectEnum2); //Should be false

+0

我已將我的代碼修復爲Javascript。 – Code

+0

@Code偉大的問題,現在我明白你正在做什麼,並改變了我的答案。 –