2016-08-17 55 views
4

阅读处理在Javascript ENUM Type"recommended way",我仍然不确定,因为我可以用伪造的值进行比较的价值,而我只是比较一个“枚举”类型值:有没有办法在Javascript中拥有/锁定枚举对象的唯一索引值?

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

琴弦我(“星期一”,“星期二”,“blahblahday”)与我的“枚举类型:DaysEnum”完全无关,可以由用户提供,这可能会导致一些不会被解释器察觉的细微错误(如错别字)。

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

+0

如果你想避免蒙混过关,我认为你需要一个好的IDE,而不是试图与解释器做到这一点。例如。我的代码'switch(day){case DaysEnum.m [onday ...]}'通过webstorm自动完成。 – inf3rno

+1

谢谢,但这不是关于输入错误,而是关于枚举值的唯一性(阅读:任何具有特定值的字符串都可以符合我的枚举,这是不好的恕我直言) – Motocarota

+0

不是**这**不好,但有点不可思议 – Motocarota

回答

1

一个可能的解决方案,我发现ES2015可以通过符号

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 
} 
相关问题