2017-06-09 36 views
22

我正在用Javascript重建一箇舊Java項目,並意識到在JS中沒有好的方法來執行枚舉。用ES6在JavaScript中枚舉

我能想出的最好的是:

const Colors = { 
    RED: Symbol("red"), 
    BLUE: Symbol("blue"), 
    GREEN: Symbol("green") 
}; 
Object.freeze(Colors); 

const保持Colors被重新分配,並凍結它可以防止變異的鍵和值。我正在使用符號,因此Colors.RED不等於0,或除本身以外的任何其他內容。

這個配方有問題嗎?有沒有更好的辦法?


(我知道這個問題有點重複的,但所有的previous Q/As都相當老了,ES6爲我們提供了一些新的功能。)

+2

這將是ES6一個完美的方法。你不必凍結它 – Nirus

+2

@Nirus你做的,如果你不希望它被修改。 – zerkms

+1

你有沒有注意到[這個答案](https://stackoverflow.com/a/30058506/1048572)? – Bergi

回答

27

有一個問題這個表述?

我沒有看到任何。

有沒有更好的方法?

我的兩個語句摺疊成一個:

const Colors = Object.freeze({ 
    RED: Symbol("red"), 
    BLUE: Symbol("blue"), 
    GREEN: Symbol("green") 
}); 

如果你不喜歡的樣板,如反覆Symbol電話,你當然也可以寫一個輔助函數makeEnum創建名字列表中的同一件事。

+2

這裏沒有領域問題嗎? –

+0

@torazaburo你的意思是,當代碼加載兩次時,它會產生不同的符號,這不會是一個字符串問題?是的,好點,讓它成爲答案:-) – Bergi

+0

我想你可以在某處存儲符號,然後在初始化枚舉時賦予它們。是否有另一種方法使它們獨一無二? ('Symbol.for'會有同樣的問題。) –

0

另外檢查Enumify,這是一個很好的功能強大的ES6枚舉庫。

希望這會幫助別人。

最好的問候,

靈光