JavaScriptでenum(列挙型)できないのか調べてみたらできました。
const type = {
CAT: Symbol(),
DOG: Symbol()
};
const type1 = type.CAT;
const type2 = type.DOG;
console.log(type1 === type2 ? '同じ' : '違う');
これ実行すれば期待どおりに次の結果が得られます(ここではsrcフォルダ以下のtype.jsに記述しています)。
node .\src\type.js 違う
CATやDOGに無意味に1とか2を割り当てなくて良いのが素敵です!
ここで今度は次のコードを実行してみます。
const type = {
CAT: Symbol(),
DOG: Symbol()
};
const type1 = type.CAT;
const type2 = type.CAT;
console.log(type1);
console.log(type.DOG);
console.log(type1 === type2 ? '同じ' : '違う');
実行結果は次です。
> node .\src\type.js Symbol() Symbol() 同じ
当然ながらCATやDOGが1とか2に変換されて表示されないのは良いのですが、どちらだかわからないですね。
そこで、次にしてみます。
const type = {
CAT: Symbol('cat'),
DOG: Symbol('dog')
};
const type1 = type.CAT;
const type2 = type.DOG;
console.log(type1);
console.log(type.DOG);
console.log(type1 === type2 ? '同じ' : '違う');
違いがわかるようになりました。
node .\src\type.js Symbol(cat) Symbol(dog) 違う
更にこの定義を外部ファイルにして利用する例です。
// type.js
module.exports = type = {
CAT: Symbol('cat'),
DOG: Symbol('dog')
};
// main.js
const type = require('./type');
const type1 = type.CAT;
const type2 = type.CAT;
console.log(type1, type2);
console.log(type1 === type2 ? '同じ' : '違う');