【问题标题】:What's the difference when I enclose a method name inside a function in ' '? [duplicate]当我将方法名称包含在''中的函数中时有什么区别? [复制]
【发布时间】:2013-04-14 08:51:03
【问题描述】:

我有以下代码:

 var factory = {
        query: function (selectedSubject) {
           ..
        }
 }

在 Javascript 中是这样的:

 var factory = {
        'query': function (selectedSubject) {
           ..
        }
 }

我都看过,不知道有没有区别。

【问题讨论】:

  • 顺便说一句,这也适用于属性——不仅仅是方法。

标签: javascript


【解决方案1】:

您可以同时使用这两个选项,但如果有空格,则不能使用第一个选项。这就是为什么有第二种选择。

【讨论】:

  • 还有另一个原因。如果属性名是保留关键字,如@9​​87654321@、ifclass,也必须加引号。
  • @AlexeyLebedev:不。 foo={if:100} 是有效的 javascript。
  • @thg435:也许规范是这么说的,但实际上它取决于 JS 解析器。在 IE 中foo={if:100} 无效。即使在 Chrome 和 FF 中;{if:1}; 是无效的,而;{iif:1}; 是有效的。
  • @AlexeyLebedev:IE 可能会损坏,但 Chrome 100% 遵循标准。 ;{if:1}; 不是对象文字,因此出现错误。
  • thg435:你说得对,我没想到在这种情况下iif 是块中的标签而不是属性名称。就像在这个例子中:function foo() { x: alert(1) }
【解决方案2】:

有效的 JSON 要求 "" 包围匿名对象的属性名称,但如果属性名称不是保留字或不包含某些特殊字符,则可以省略它们。通常使用“”更安全。

【讨论】:

  • 不,在 JSON 中,您不能省略双引号或使用单引号。在 JavaScript 中你可以。
  • JSON 与原生 JS 对象无关,它们不遵循相同的规则
  • JSON 源自 JS。这与它有很大关系。它是 JS 原生对象的简化版本。这就是为什么我说 JSON 需要“”,而 JS 不需要。见tools.ietf.org/html/rfc4627
【解决方案3】:

The standard 要求属性名称为以下之一:

PropertyName :
   IdentifierName
   StringLiteral
   NumericLiteral

也就是说,所有这些都是有效的:

 obj = {
       "query": ....
       'query': ....
        query:  ....
        12e45:  ....
   }

请注意,与流行观点相反,该标准要求名称是有效标识符,仅要求“标识符名称”。这实际上意味着您可以使用 JS 保留字作为属性名称:

x = {
    if: 100,
    function: 200,
}
console.log(x.if + x.function) // 300

并不是说它在日常编程中非常有用,只是一个值得了解的有趣事实。

【讨论】:

    猜你喜欢
    • 2015-08-11
    • 2011-07-08
    • 2016-08-26
    • 2021-08-03
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 2020-08-23
    • 2011-09-02
    相关资源
    最近更新 更多