7

deleteそれがJavaScriptのキーワードであることは知っています。だから私はこのコードを持っています(例えば):

var user = {
   create : function () {
       // Create a user account
   },

   delete : function () {
       // Delete a user account
   }
};

上記は (古いバージョンの IE を除いて) 動作するので、私の質問は - それは良い考えですか? 明らかに、呼び出しuser.delete();は、コードを利用する人にとって、次のようなものよりもはるかに明確ですuser.delete_one();

明らかにキーワードは重要ですが、ケースバイケースで、この方法を使用しても問題ありませんか (従来の IE サポートは必要ありません)、またはより良い解決策はありますか?

4

4 に答える 4

8

あなたはこのようにそれを行うことができます:

var user = {
   create : function () {
       // Create a user account
   },

   'delete' : function () {
       // Delete a user account
   }
};

または二重引用符を使用して"

于 2012-10-11T13:26:50.833 に答える
5

キーワードを上書きしようとしないでください。IMO これは悪い習慣であり、他の開発者にとっては非常に混乱を招くでしょう。削除機能を使用するのではなく、単純に名前を変更できますremove

于 2012-10-11T13:28:43.110 に答える
3

JS キーワードを上書きしていないため、コードは期待どおりに機能します。キーワードを変数または関数名として宣言しようとすると、JS は error を表示しますSyntaxError: Unexpected token delete

選択した方法で問題ありませんが、JS キーワードを直接オーバーライドしないでください。

于 2012-10-11T13:31:39.013 に答える
2

オブジェクト リテラルを使用している場合、プロパティ名は次のいずれかになります。

IdentifierName
StringLiteral
NumericLiteral

StringLiteral明確にNumericLiteralする必要があります。正確には何IdentifierNameですか?

仕様のセクション 7.6 を見てみましょう。

IdentifierName ::
     IdentifierStart
     IdentifierName *IdentifierPart*

IdentifierStart ::
     UnicodeLetter
     $
     _
     \ UnicodeEscapeSequence

IdentifierPart ::
     IdentifierStart
     UnicodeCombiningMark
     UnicodeDigit
     UnicodeConnectorPunctuation
     <ZWNJ>
     <ZWJ>

したがって、IdentifierName実際には上記の任意の文字シーケンスです。予約語かどうかは問題ではありません。

変数名と関数名に使用できる名前はIdentifiers と呼ばれ、次のように定義されます。

識別子 ::
     IdentifierNameですが、ReservedWordではありません

ご覧のとおり、予約語は識別子の可能性として明示的に除外されていますが、オブジェクト プロパティの可能性は除外されていません。

ただし、パーサーがどの程度「優れている」か、またすべての規則に準拠しているかどうかはわかりません。さらに、JSHintなどのリンティング ツールは通常、予約済みのキーワードが有効であるにもかかわらず、その使用を警告します。安全のために、そのような単語は引用符で囲み、括弧表記を使用してアクセスする必要があります。

var foo = {'delete': ... }
foo['delete'] = ....;

これが面倒な場合は、予約語をプロパティ名として使用しないでください。たとえば、 の代わりに をdelete使用できますremove

于 2013-02-15T10:42:30.813 に答える