[解決済み] Template String As Object プロパティ名
質問
JavaScriptでは、オブジェクトのプロパティのキーとしてテンプレート文字列を使用できないのはなぜですか?例えば、私が入力するとき
foo = {`bar`: 'baz'}
をNodeJSのREPLに入れると
SyntaxError
がスローされ、長いスタックトレースとともに "予期しないテンプレート文字列" が表示されます。しかし、プロパティ値は正常であり、これは予想外ではありません。同様のエラーはブラウザでも発生し、たとえば、Firebug は
SyntaxError
で、"invalid property id" がスローされます。
テンプレート文字列は、"計算されたプロパティ名"で許可されています。例えば、この構文をサポートするすべてのブラウザで、これは完全にうまくコンパイルされます。
var foo = {
[`bar` + 1]: `baz`
};
で、オブジェクトを作成します。
{"bar1": "baz"}
.
なぜテンプレート文字列はリテラルなオブジェクトのキーとして許可されないのですか? パフォーマンス上の理由でしょうか?テンプレート文字列はコンパイルされなければならず、おそらく実行時に (間違っていたら訂正してください)、つまり、このオブジェクトに遭遇するたびに、インタープリタはオブジェクト名を計算しなければなりません。ES5以降、ゲッターとセッターはありますが、quot;cook"テンプレート文字列のようなものを考慮すると、これは遅くなる可能性があるように思われます。Firefoxはこのことをエラーとして言及しないので、私は予想外だと思いました。この構文は将来的に許可されるようになるのでしょうか?
どのように解決するのですか?
テンプレート文字列は、なぜリテラル・オブジェクト・キーとして許可されないのですか?
テンプレート文字列は式であり、リテラルではありません 1 . 文字列リテラル(および識別子)はプロパティ名にのみ使用でき、それ以外のもの - 静的であることが知られていないもの - には、計算されたプロパティ名が必要です。
それはパフォーマンス上の理由ですか?
いいえ、それはありえません。パースしやすくするためで、定数(静的に知られている)プロパティ名と動的に計算されたプロパティ名を区別しやすくするためです。
そして、ほとんどの場合、それは誰も必要としない機能です。何も単純化も短縮もしませんし、それで達成できることはすでに可能です。
この構文は将来的に許可されるようになるのでしょうか?
いいえ。
1: テンプレート・リテラルと呼ばれているものでも、厳密には リテラル . そして、テンプレートは文字列である必要さえなく、何にでも評価することができます。
関連
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトにキーが存在するかどうかをチェックする?
-
[解決済み] JavaScriptのオブジェクトにキーと値のペアを追加するにはどうすればよいですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み】未定義のオブジェクトプロパティを検出する
-
[解決済み] 配列からオブジェクトを生成する
-
[解決済み] node.jsで文字列のsha1ハッシュを取得するにはどうすればよいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JSのDateからDay名
-
[解決済み] JavaScript で範囲を作成する - 奇妙な構文
-
[解決済み] ExtJS 4のイベントハンドリングについて
-
[解決済み] node.jsで文字列のsha1ハッシュを取得するにはどうすればよいですか?
-
[解決済み] $.ajax実行中にローディングイメージを表示する
-
[解決済み] 文字列とラベルのローカライズとグローバリゼーションのベストプラクティス【終了しました
-
[解決済み] JavaScript で `throw` の後に `return` をする必要がありますか?
-
[解決済み] JavaScriptのArray.sort()メソッドでシャッフルするのは正しいのか?
-
[解決済み] これは純関数ですか?
-
[解決済み] 変異を伴わないオブジェクトからの値の削除