JavaScriptでEnum、列挙型を使用するさまざまな方法を紹介します。 JavaScriptにはenumキーワードがないので、const
、Symbol
、Object.freeze()
などを使ってEnumを実装して使うことができます。
1.単にconstでEnumを実装する
次のようにconstでEnumを定義できます。
const Colors = {
WHITE : 0,
BLACK : 1,
GREY : 2,
};
以下のようにEnumを使用できますが、この実装方法の問題は、Enumと他の値を区別できないことです。 color = 1
のようにEnumを使わずに設定してもBLACKとして認識されます。
const Colors = {
WHITE : 0,
BLACK : 1,
GREY : 2,
};
function printColor(color) {
switch (color) {
case Colors.WHITE:
console.log('White');
break;
case Colors.BLACK:
console.log('Black');
break;
case Colors.GREY:
console.log('Grey');
break;
default:
console.log('color not defined');
}
}
let color = Colors.BLACK;
printColor(color)
color = 1;
printColor(color)
Output:
Black
Black
2. SymbolによるEnumの実装
Symbolを使用すると、上記の問題を解決できます。 Enumを定義するときに、EnumのvalueをSymbolで囲むと、他の変数とEnumが区別されます。
const Colors = {
WHITE : Symbol(0),
BLACK : Symbol(1),
GREY : Symbol(2),
};
function printColor(color) {
switch (color) {
case Colors.WHITE:
console.log('White');
break;
case Colors.BLACK:
console.log('Black');
break;
case Colors.GREY:
console.log('Grey');
break;
default:
console.log('color not defined');
}
}
let color = Colors.BLACK;
printColor(color);
color = 1;
printColor(color);
color = Symbol(1);
printColor(color);
Output:
Black
color not defined
color not defined
しかし、上記の実装方法にも問題はあります。プログラムの実行中にEnumのvalueが変更される可能性があるということです。
以下のコードは上記と同じ方法でEnumを実装しています。ところで、コードの途中で Colors.BLACK = 'aaa';
で Enum を変更しようとし、実際に変更になります。実行結果を見ると、Enumの値が変わることがわかります。この問題を解決するには、freezeを使用して初期化されたEnumが変更されないように実装する必要があります。
const Colors = {
WHITE : Symbol(0),
BLACK : Symbol(1),
GREY : Symbol(2),
};
function printColor(color) {
switch (color) {
case Colors.WHITE:
console.log('White');
break;
case Colors.BLACK:
console.log('Black');
break;
case Colors.GREY:
console.log('Grey');
break;
default:
console.log('color not defined');
}
}
let color = Colors.BLACK;
printColor(color);
Colors.BLACK = 'aaa';
printColor(color);
Output:
Black
color not defined
3. Symbol, Object.freeze() で Enum を実装
以下のように Object.freeze()
で Enum を実装すると、途中で Enum を変更しようとしても値は変更されません。
const Colors = Object.freeze({
WHITE : Symbol(0),
BLACK : Symbol(1),
GREY : Symbol(2),
});
function printColor(color) {
switch (color) {
case Colors.WHITE:
console.log('White');
break;
case Colors.BLACK:
console.log('Black');
break;
case Colors.GREY:
console.log('Grey');
break;
default:
console.log('color not defined');
}
}
let color = Colors.BLACK;
printColor(color);
Colors.BLACK = 'aaa';
printColor(color);
Output:
Black
Black
References
Related Posts
- JavaScript - 現在のタイムスタンプを取得する
- Node.js - ファイル、ディレクトリの削除
- JavaScript - 文字列 空白 削除
- JavaScript sort() 関数、例の紹介
- JavaScript Set delete() 関数、値の削除
- JavaScript - 実行時間の測定方法
- JavaScript - 配列をオブジェクトに変換する4つの方法
- JavaScript - Mapの作成と初期化、3つの方法
- JavaScript - Map巡回、3つの方法
- JavaScript - Mapソート(キーまたはvalueでソート)
- JavaScript - オブジェクトに特定の値が存在することを確認する
- JavaScript - 数値がNaNであるかどうかを確認する方法
- JavaScript Enum (列挙型)
- JavaScript - 日付/時刻比較、3つの 方法
- JavaScript - 空の文字列の確認、2つの方法
- JavaScript - 最後の文字を削除する、4つの方法
- JavaScript - 配列を文字列に変換、3つの方法
- JavaScript - 複数行の文字列、3つの方法
- JavaScript - オブジェクトを文字列に変換する2つの方法
- JavaScript - 配列から重複排除、4つの方法
- JavaScript - 文字列の比較方法、5つの方法
- JavaScript - 文字列から数字のみを抽出する
- JavaScript - 配列のソート方法(昇順、降順)
- JavaScript - 文字列 切り出し(split、substr、substring、slice)
- JavaScript - Setを配列(Array)に変換する
- JavaScript - 文字列を配列(Array)に変換
- JavaScript - 関数の宣言方法
- JavaScript - 配列宣言、追加、削除などの基本的 な使用法のクリーンアップ
- JavaScript - 文字列を数値に変換する方法
- JavaScript - 文字列を結合する、接続する(concat、join、+)