Javascript对象属性引号

mac*_*ict 12 javascript object

假设我有以下对象:

var VariableName = {
    firstProperty: 1,
    secondProperty: 2
}
Run Code Online (Sandbox Code Playgroud)

我是否必须将对象属性包装在这样的引号中?

var VariableName = {
    'firstProperty': 1,
    'secondProperty': 2
}
Run Code Online (Sandbox Code Playgroud)

这是JavaScript对象文字中单引号是正确的答案吗?

jAn*_*ndy 28

不,你不需要这样做.

引用对象键的唯一原因是

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

所以举个例子

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
};
Run Code Online (Sandbox Code Playgroud)

  • 这个答案并不准确.它没有解释那些"特殊字符"究竟是什么(并没有链接到这样的解释),它只提到ES3行为,其中保留字不允许用作不带引号的属性名称 - 在ES5中这是允许的.请在此处查看有关重复问题的答案:http://stackoverflow.com/a/9568622/96656 (4认同)

Que*_*tin 5

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

firstPropertysecondProperty都是有效的标识符,所以你不需要引号。

有关更多详细信息,请参阅规范的第 65 页。


Sir*_*rko 5

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

另一种可能需要用引号引起来的可能性是使用Java缩小符(如Google Closure编译器),因为它倾向于替换所有属性名称。但是,如果将属性名称用引号引起来,闭包编译器将在编码时保留该属性。在库中导出对象或使用参数对象时,这具有一些相关性。