[解決済み] ES6によるJavascriptの列挙
2022-02-19 14:37:57
質問
古いJavaプロジェクトをJavascriptで再構築しているのですが、JSでenumを行う良い方法がないことに気づきました。
私が思いつくベストは
const Colors = {
RED: Symbol("red"),
BLUE: Symbol("blue"),
GREEN: Symbol("green")
};
Object.freeze(Colors);
は
const
は
Colors
は再アサインされないようにし、フリーズすることでキーと値の変異を防ぎます。Symbolsを使っているので
Colors.RED
とは等しくありません。
0
またはそれ自身以外の何か。
この定式化には問題があるのでしょうか?もっと良い方法はないでしょうか?
(この質問は少し繰り返しになりますが、すべての 過去のQ&A はかなり古く、ES6ではいくつかの新しい機能が提供されています)。
EDITです。
もう一つの解決策は、シリアライズの問題に対処するものですが、レルムの問題が残っていると思います。
const enumValue = (name) => Object.freeze({toString: () => name});
const Colors = Object.freeze({
RED: enumValue("Colors.RED"),
BLUE: enumValue("Colors.BLUE"),
GREEN: enumValue("Colors.GREEN")
});
値としてオブジェクト参照を使用することで、Symbolと同様の衝突回避が可能です。
解決方法は?
<ブロッククオートこの処方に問題はないのでしょうか?
ないですね。
<ブロッククオート何か良い方法はないでしょうか?
2つの文を1つに折りたたむと
const Colors = Object.freeze({
RED: Symbol("red"),
BLUE: Symbol("blue"),
GREEN: Symbol("green")
});
ボイラープレートが嫌いな人は、繰り返しのような
Symbol
を呼び出すことで、もちろんヘルパー関数
makeEnum
は、名前のリストから同じものを作成します。
関連
-
[解決済み】JavaScriptで':'(コロン)は何をするのか?
-
[解決済み】別のjsファイル内でJavaScriptの関数を呼び出す
-
[解決済み】ある要素を別の要素に移動させるには?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み] JavaScriptで現在のURLを取得する?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】このエラーの原因は何ですか - "Fatal error: ローカルgruntを見つけることができません"
-
[解決済み】TypeError: $(...).DataTable は関数ではありません。
-
[解決済み】Failed to load resource: net::ERR_FILE_NOT_FOUND loading json.js
-
[解決済み】Javascript:getElementById対getElementsById(両方が別のページで動作する)。
-
[解決済み】webpack-dev-serverにリモート接続すると、「Invalid Host header」というメッセージが表示されます。
-
[解決済み】 Uncaught Error: Invariant Violation: 解決済み】 Uncaught Error: Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function but got: object.
-
[解決済み】React-Routerの子が1つしかない。
-
[解決済み】リソースはドキュメントと解釈されるが、MIMEタイプはapplication/zipで転送される
-
[解決済み】 \u003C とは何ですか?
-
[解決済み】JavaScriptで関数が存在するかどうかを確認する方法は?