2016-08-17 57 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 
} 
相關問題