JavaScript がテンプレート文字列をオブジェクト プロパティ キーとして許可しないのはなぜですか? たとえば、次のように入力すると:
foo = {`bar`: 'baz'}
NodeJS REPL にSyntaxError
、長いスタック トレースと共に「予期しないテンプレート文字列」をスローします。ただし、プロパティ値は問題ありませんが、これは予想外のことではありません。ブラウザでも同様のエラーが発生します。たとえば、Firebug がSyntaxError
「無効なプロパティ ID」をスローします。
テンプレート文字列は、「計算されたプロパティ名」で許可されています。たとえば、これは次の構文をサポートするすべてのブラウザーで完全に正常にコンパイルされます。
var foo = {
[`bar` + 1]: `baz`
};
そしてオブジェクトを作成します{"bar1": "baz"}
。
テンプレート文字列がリテラル オブジェクト キーとして許可されないのはなぜですか? パフォーマンス上の理由ですか?テンプレート文字列は、おそらく実行時にコンパイルする必要があります (間違っていたら訂正してください)。つまり、このオブジェクトに遭遇するたびに、インタープリターはオブジェクト名を計算する必要があります。「調理された」テンプレート文字列などを考慮に入れると、遅くなる可能性があるように見えますが、ES5 以降にはゲッターとセッターがありました。Firefox はこれをエラーとして言及していません。構文は将来的に許可されますか?