我知道delete
是JavaScript中的关键字。所以我有这个代码(例如):
var user = {
create : function () {
// Create a user account
},
delete : function () {
// Delete a user account
}
};
上述作品(除了旧版本的IE),所以我的问题是 - 这是一个好主意。显然,使用代码的人比user.delete();
user.delete_one();
的人更清楚
显然,关键字很重要,但根据具体情况,可以使用这种方法(我不需要传统的IE支持),还是有更好的解决方案?
答案 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
StringLiteral
和NumericLiteral
应该清楚。究竟是什么IdentifierName
?
让我们看看section 7.6 of the specification:
IdentifierName ::
IdentifierStart
IdentifierName * IdentifierPart *IdentifierStart ::
UnicodeLetter
$
_
\
UnicodeEscapeSequenceIdentifierPart ::
IdentifierStart
UnicodeCombiningMark
UnicodeDigit
UnicodeConnectorPunctuation
<ZWNJ>
<ZWJ>
因此,IdentifierName
实际上是如上所述的任何字符序列。保留字是否无关紧要。
可用于变量和函数名称的名称称为Identifier
s,定义为:
标识符::
IdentifierName 但不是 ReservedWord
你看,保留字显式被排除作为标识符的可能性,但不包括对象属性。
然而,您永远不会知道解析器的“好”程度,以及它是否符合所有规则。此外,JSHint等linting工具通常会警告您使用保留关键字,尽管它是有效的。 为了安全起见,您应该在引号中加上这些单词,甚至使用括号表示法来访问它:
var foo = {'delete': ... }
foo['delete'] = ....;
如果这太麻烦,请不要使用保留字作为属性名称。例如,您可以使用delete
代替remove
。