オブジェクト リテラルを使用している場合、プロパティ名は次のいずれかになります。
IdentifierName
StringLiteral
NumericLiteral
StringLiteral
明確にNumericLiteral
する必要があります。正確には何IdentifierName
ですか?
仕様のセクション 7.6 を見てみましょう。
IdentifierName ::
IdentifierStart
IdentifierName *IdentifierPart*
IdentifierStart ::
UnicodeLetter
$
_
\
UnicodeEscapeSequence
IdentifierPart ::
IdentifierStart
UnicodeCombiningMark
UnicodeDigit
UnicodeConnectorPunctuation
<ZWNJ>
<ZWJ>
したがって、IdentifierName
実際には上記の任意の文字シーケンスです。予約語かどうかは問題ではありません。
変数名と関数名に使用できる名前はIdentifier
s と呼ばれ、次のように定義されます。
識別子 ::
IdentifierNameですが、ReservedWordではありません
ご覧のとおり、予約語は識別子の可能性として明示的に除外されていますが、オブジェクト プロパティの可能性は除外されていません。
ただし、パーサーがどの程度「優れている」か、またすべての規則に準拠しているかどうかはわかりません。さらに、JSHintなどのリンティング ツールは通常、予約済みのキーワードが有効であるにもかかわらず、その使用を警告します。安全のために、そのような単語は引用符で囲み、括弧表記を使用してアクセスする必要があります。
var foo = {'delete': ... }
foo['delete'] = ....;
これが面倒な場合は、予約語をプロパティ名として使用しないでください。たとえば、 の代わりに をdelete
使用できますremove
。