2012-02-08 136 views
7

比方说,我有以下对象:Javascript对象属性引用

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

我必须在这样的报价来包装对象的属性?

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

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

+2

可能有趣的是,虽然使用对象文字符号时可以从名称中省略引号*,但JSON规范**要求**键名称以**双引号引起来。 – Matt 2012-02-08 11:39:15

回答

21

不,你不需要那样做。

的唯一原因引用对象键

  • 属性名保留/浏览器/ 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 
}; 
+3

这个答案并不准确。它没有解释那些“特殊字符”究竟是什么(并且它没有链接到这样的解释),并且它只提到ES3的行为,其中保留字不允许用作未加引号的属性名称 - 在ES5中这是允许的。请在这里查看我的重复问题的答案:http://stackoverflow.com/a/9568622/96656 – 2012-03-06 07:47:37

1

对于Javascript,您通常不必使用引号。如果您愿意,您可以使用'",并且如果您的财产的名称和一个JS保留词如null之间发生冲突,则必须使用引号。是的,你链接的答案似乎是正确的。

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

4

属性名必须是字符串,数字或标识符。如果名称是一个有效的标识符,那么你不需要引号,否则它们遵循与字符串相同的规则。

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

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

4

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

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