2017-07-28 83 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伟大的问题,现在我明白你正在做什么,并改变了我的答案。 –