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
Black2. 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 defined3. 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
BlackReferences
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、+)