有没有办法在Javascript中拥有/锁定Enum对象的唯一索引值?

Is there a way to have/lock unique index values of the Enum object in Javascript?

本问题已经有最佳答案,请猛点这里访问。

阅读javascript中处理枚举类型的"推荐方法",我仍然不确定,因为我可以将该值与伪造值进行比较,而只应将其与"枚举"类型值进行比较:

1
2
3
4
5
6
7
8
9
10
11
 var DaysEnum = {"monday":1,"tuesday":2,"wednesday":3, ...}
 Object.freeze(DaysEnum)

 switch( day ){
   case"monday":
     return"Hello"
   case"tuesday":
     return"Hi"
   case"blahblahday":
     return"No"
 }

用户可以提供我的"枚举类型:daysenum"中的字符串("Monday"、"Tuesday"、"Blahblahday"),这可能会导致一些解释程序未发现的细微错误(如打字错误)。

有没有办法让/锁定枚举对象的唯一索引值?


我发现ES2015可能的解决方案是通过符号

http://putaindecode.io/en/articles/js/es2015/symbols/

这样,你就有了独特的"锁定"值,就像其他语言一样,比如Java。

1
2
3
4
5
6
7
8
9
10
11
 const DAY_MONDAY = Symbol();
 const DAY_TUESDAY = Symbol();

 switch(animal) {
   case DAY_MONDAY:
     return"Hello"
   case DAY_TUESDAY:
     return"Hi"
   //there is no way you can go wrong with DAY_BLAHBLAHDAY
   //the compiler will notice it and throw an error
 }