28

所以问题很简单,在 JavaScript 中声明名为“delete”的方法是否安全(明智)。例子:

var request = {
    delete : function (url) {
        // Some code...
    }
}
request.delete('http://page.dev/users/1');

我已经在 Firefox 中对此进行了测试,它可以正常工作,但只是想知道它是否会在其他一些浏览器中引起问题;或者一般来说这是一个好习惯。

4

6 回答 6

11

根据语言规范

标识符名称是根据 Unicode 标准第 5 章“标识符”部分中给出的语法解释的标记,并进行了一些小的修改。Identifier是不是ReservedWordIdentifierName(参见7.6.1)。

这意味着您不能将delete其用作变量或函数名称,但可以将其用作对象属性名称。在规范的先前版本中情况并非如此,这就是为什么大多数其他答案都建议您完全避免使用保留字。但是,在符合 ES5 的实现中,应该没有问题。

于 2013-09-13T19:15:04.690 回答
10

如果您使用this['style'],您将永远不会有问题,但是使用this.style,您应该避免保留字,其中包括 delete。根据规范,使用保留字作为属性名称实际上是可以的,但无论如何我都会避免它,因为周围有一些不好的实现(而且使用保留字通常感觉不好,无论上下文如何)。

于 2013-09-13T19:12:00.660 回答
3

不,这不是一个好主意,因为 delete 是一个关键字。在最新版本中,他们限制了会导致问题的地方,但仍然有一些。

避免任何类型问题的一种方法是使用:

var request = {
    "delete" : function (url) {
        // Some code...
    }
}
request["delete"]('http://page.dev/users/1');

但这可能没有那么优化,而且有点难看。我会使用另一个名称,例如“删除”。

于 2013-09-13T19:13:28.780 回答
2

delete位于JavaScript 保留字列表中,使用后果自负。

删除 object.property

删除对象['属性']

于 2013-09-13T19:11:56.687 回答
1

我会像其他人建议的那样使用不同的关键字——你可以使用类似的同义词removepurge——你明白了。

但更重要的是 - 确保您正在为调用的易读性进行服务器端验证http://page.dev/users/1否则任何人都可以使用“ ”构造一个删除调用

于 2013-09-13T19:21:01.337 回答
0

您应该注意,即使使用括号语法来访问属性,也并非在所有浏览器上都是安全的。

Internet Explorer 7 和 8 无论如何都会崩溃。

于 2013-12-16T12:54:24.933 回答