覆盖Javascript关键字

时间:2012-10-11 13:25:16

标签: javascript keyword

我知道delete是JavaScript中的关键字。所以我有这个代码(例如):

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

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

上述作品(除了旧版本的IE),所以我的问题是 - 这是一个好主意。显然,使用代码的人比user.delete();

更能让访问user.delete_one();的人更清楚

显然,关键字很重要,但根据具体情况,可以使用这种方法(我不需要传统的IE支持),还是有更好的解决方案?

4 个答案:

答案 0 :(得分:8)

你可以这样做:

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

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

或使用双引号"

答案 1 :(得分:4)

请勿尝试覆盖关键字。 IMO这是不好的做法,对另一个开发人员来说会非常困惑。您可以将其重命名为remove

,而不是使用删除功能

答案 2 :(得分:3)

您的代码将按预期工作,因为您没有覆盖JS关键字。如果您尝试将关键字声明为变量或函数名称,JS将显示错误SyntaxError: Unexpected token delete

您选择的方式没有问题,但不要直接覆盖JS关键字。

答案 3 :(得分:2)

当您使用object literal时,属性名称可以是以下任何一种:

  

IdentifierName
  串文字
   NumericLiteral

StringLiteralNumericLiteral应该清楚。究竟是什么IdentifierName

让我们看看section 7.6 of the specification

  

IdentifierName ::
   IdentifierStart
   IdentifierName * IdentifierPart *

     

IdentifierStart ::
   UnicodeLetter
  $
  _
  \ UnicodeEscapeSequence

     

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

因此,IdentifierName实际上是如上所述的任何字符序列。保留字是否无关紧要。

可用于变量和函数名称的名称称为Identifier s,定义为:

  

标识符::
   IdentifierName 但不是 ReservedWord

你看,保留字显式被排除作为标识符的可能性,但不包括对象属性。

然而,您永远不会知道解析器的“好”程度,以及它是否符合所有规则。此外,JSHint等linting工具通常会警告您使用保留关键字,尽管它是有效的。 为了安全起见,您应该在引号中加上这些单词,甚至使用括号表示法来访问它:

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

如果这太麻烦,请不要使用保留字作为属性名称。例如,您可以使用delete代替remove