【问题标题】:Is there a way to have/lock unique index values of the Enum object in Javascript? [duplicate]有没有办法在 Javascript 中拥有/锁定 Enum 对象的唯一索引值? [复制]
【发布时间】:2016-12-23 22:32:14
【问题描述】:

阅读Javascript中处理ENUM Type"recommended way",我仍然不确定,因为我可以将值与伪造的值进行比较,而我应该只与“枚举”类型的值进行比较:

 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"
 }

我切换到比较的字符串(“monday”,“tuesday”,“blahblahday”)完全不受我的“枚举类型:DaysEnum”的影响,可以由用户提供,这可能会导致一些微妙的解释器未发现的错误(如拼写错误)。

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

【问题讨论】:

  • 如果你想避免输入错误,我认为你需要一个好的 IDE,而不是试图用解释器来做到这一点。例如。我通过您的代码switch (day){ case DaysEnum.m[onday...] } 使用 webstorm 自动完成。
  • 谢谢,但这不是关于错误输入,而是关于枚举值的唯一性(阅读:任何具有特定值的字符串都可以符合我的枚举,恕我直言,这很糟糕)
  • 不是不好,但有点不受欢迎

标签: javascript enums


【解决方案1】:

我在 ES2015 中找到的一个可能的解决方案是通过 Symbols

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

这样你就有了独特的“锁定”值,就像你在其他语言中一样,比如 Java

 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
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    相关资源
    最近更新 更多