予約語をオブジェクトのプロパティ名として使用できますか?
この問題は、以前のスタック オーバーフローの質問: Browser support for using a reserved word as a property name in JavaScript で間接的に提起されました。答えは、アレックス・ウェインによる一般的なコンセンサスのようでした:
これらの単語を使用できますが、文字列としてのみ使用でき、省略形のプロパティは使用できません。
foo['class']; // cool foo.class; // not cool
彼らはおそらくこの分野では私よりも知識があり、状況によっては予約語を使用するのはおそらく悪い考えだと思いますが、次の 2 つの点に基づいて彼らの結論は間違っていると思います。
予約語を「速記」プロパティとして使用してテストする
HTMLFormElement により、「短縮形」で予約語を使用しないことが不可能になります
最初に、予約語リストを使用して、それぞれがプロパティとして and に追加されObject
、HTMLElement
両方ともobj["word"]
andobj.word
として取得され、次に and として取得されましobj["word"]
たobj.word
。63 のケースのそれぞれで、8 つのテストすべてが正しく機能しました。
第 2 に、HTMLFormElement は簡略表記を使用して要素を取得するため、これが機能する必要があります。<input name='typeof' value='scalar' />
がフォームの要素である場合、 form.typeof
== "スカラー" です。
私の経験からすると、通常、予約語はプログラムではなく、データに影響を与えます (たとえば、"private" という名前の列)。そのため、それらは JSON オブジェクトを汚染し、そこから入力し、そこから HTMLFormElement を汚染します。簡単に言えば、膨大な量の (IMHO 不必要な) 作業がなければ、予約語が省略形で正しく機能しないようにすることは不可能です。
これらの本当の問題のように私には思えます:
予約語ではなく、既存のプロパティと競合しないように注意する必要があります
(すべてではないにしても多くの)変数を予約語にすることはできません
プロパティとしての予約語の使用は混乱を招く可能性があります (必ずしもそうとは限りません)。
予約語をプロパティ名として使用し、それらに文字列または省略形としてアクセスすることは、状況に少し常識が適用される限り、問題ないという結論は正しいでしょうか?