【问题标题】:Is it safe to declare a delete method in JavaScript在 JavaScript 中声明删除方法是否安全
【发布时间】:2013-09-13 19:09:36
【问题描述】:

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

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

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

【问题讨论】:

标签: javascript


【解决方案1】:

根据language specification

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 看到 ES-6 (23.1.3.3) 将添加Map.prototype.delete(以及其他一些.delete()s),你的“坏感觉”应该会消退一点;)
    • @nmaier 在我的书中,如果 标准本身 使用它自己的保留字,这永远不会坏,否则什么都不会:P 但是是的,我明白你的意思。不过,我仍然会在自己的代码中避免它。
    • 您可以随时使用.remove().erase()
    • 或者你可以使用 .destroy()
    【解决方案3】:

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

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

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

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

    【讨论】:

      【解决方案4】:

      deleteJavaScript reserved words list 中,使用后果自负。

      删除object.property

      删除对象['property']

      【讨论】:

      • 2 个链接到同一个资源在 4 秒内!不知道为什么你的投票被否决了。
      【解决方案5】:

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

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

      【讨论】:

      • 是的,我可以使用不同的名称。但是,如果我能够将 JS 方法映射到 HTTP 方法——GET、POST、PUT、DELETE,那看起来会很好。无论如何,我可以做一些类似 do_post、do_get 的事情...... 我确实想到了授权。不用担心。
      • 为什么需要 JS 方法和 HTTP 方法同名?适合谁?
      • 我想我们可以将其视为某种形式的一致性。 jQuery 有方法 $.post 和 $.get;无论如何, - 任何更好的想法都非常受欢迎。 :)
      【解决方案6】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-19
        • 1970-01-01
        • 2014-06-08
        • 2013-10-07
        • 2010-10-07
        • 1970-01-01
        • 2023-04-09
        • 2021-10-27
        相关资源
        最近更新 更多