【问题标题】:Javascript object property quotes [duplicate]Javascript对象属性引号[重复]
【发布时间】:2012-02-08 11:34:55
【问题描述】:

假设我有以下对象:

var VariableName = {
    firstProperty: 1,
    secondProperty: 2
}

我必须像这样将对象属性用引号括起来吗?

var VariableName = {
    'firstProperty': 1,
    'secondProperty': 2
}

这是Single quotes in JavaScript object literal 的正确答案吗?

【问题讨论】:

  • 有趣的是,虽然在使用对象文字表示法时,引号 可以 从名称中省略,但 JSON 规范 要求 键名来 双引用。

标签: javascript object


【解决方案1】:

不,你不需要这样做。

引用对象键的唯一原因是

  • 属性名称由浏览器/js 引擎保留/使用(例如 IE 中的“类”)
  • 您的密钥中有特殊字符或空格

比如

var VariableName = {
    "some-prop": 42,  // needs quotation because of `-`
    "class": 'foobar' // doesn't syntatically require quotes, but it will fail on some IEs
    valid: 'yay' // no quotes required
};

【讨论】:

  • 这个答案并不准确。它没有解释那些“特殊字符”到底是什么(也没有链接到这样的解释),它只提到了 ES3 的行为,即在 ES5 中不允许将保留字用作不带引号的属性名称这是允许的。在此处查看我对重复问题的回答:stackoverflow.com/a/9568622/96656
【解决方案2】:

如果属性名称是保留字(如 for、in、function 等),您只需在属性周围使用引号。这样,您就可以防止 Javascript 尝试将关键字解释为语言的一部分,并且很可能会出现语法错误。 此外,如果要在属性名称中使用空格,还必须使用引号。 如果您的属性名称只是普通名称,没有任何串通的可能性或空格,您可以使用您喜欢的语法。

另一种需要引号的可能性是使用 Javascript 压缩器,如 google 闭包编译器,因为它倾向于替换所有属性名称。但是,如果您将属性名称放在引号中,则闭包编译器会在您编码时保留该属性。这在导出库中的对象或使用参数对象时具有一定的相关性。

【讨论】:

    【解决方案3】:

    对象字面量中的属性名称必须是字符串、数字或标识符。如果名称是有效标识符,则不需要引号,否则它们遵循与字符串相同的规则。

    firstPropertysecondProperty 都是有效的标识符,因此不需要引号。

    有关详细信息,请参阅the specification 的第 65 页。

    【讨论】:

      【解决方案4】:

      对于 Javascript,您通常不必使用引号。如果您愿意,可以使用'",如果您的属性名称与null 等JS 保留字之间存在冲突,则必须使用引号。您链接到的答案似乎是正确的,是的。

      对于 JSON,you should use " around strings(包括对象属性名称)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-17
        • 2011-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-20
        • 2020-12-27
        • 1970-01-01
        相关资源
        最近更新 更多