带引号和没有引号的对象键之间有什么区别?

时间:2010-12-03 18:09:06

标签: javascript

之间有什么区别吗?
obj = {'foo': 'bar'} 

obj = {foo: 'bar'}

我注意到,当我不使用引号时,您无法在密钥中使用-。但它真的有所作为吗?如果是的话,哪个?

6 个答案:

答案 0 :(得分:126)

不,引号没有区别(除非,如您所说,您希望使用不是有效JavaScript标识符的密钥)。

作为旁注,JSON data exchange format 需要围绕标识符使用双引号。

答案 1 :(得分:121)

Unquoted property names / object keys in JavaScript,我对这个主题的写作:

  

如果属性名称是数字文字或a valid identifier name,则只能省略引号。

     

[...]

     

括号表示法可以安全地用于所有属性名称。

     

[...]

     

当属性名称是有效的标识符名称时,点符号只能

请注意,保留字可以在ES5中用作不带引号的属性名称。但是,为了向后兼容ES3,无论如何我建议引用它们。

我还制作了一个工具,告诉您是否可以使用任何给定的属性名称而不带引号和/或带点符号。在mothereff.in/js-properties处尝试。

Screenshot

答案 2 :(得分:9)

这里没有区别。只是风格问题。这样做的原因之一是能够使用“超级”或“类”作为关键,因为这些是保留关键字。

有些人可能会想要传入一个带有空格的字符串,然后调用o ['我可以有空格']但我会称之为不好的做法。

答案 3 :(得分:2)

不,不是javascript。但是,当键周围的引号不存在时,某些JSON解析器将失败。

答案 4 :(得分:1)

在某些情况下,它们是不同的。例如,如果您正在使用jQuery,并且在调用jQuery $()命令创建元素时要创建一个参数列表,则引用的单词将转换为参数,而非引用的单词将转换为函数。例如," size"将设置对象的size属性,并且size(无引号)将调用对象的size()函数。请参阅底部附近的jQuery()

  

虽然第二个论点很方便,但它的灵活性会导致意想不到的后果(例如$(&#34; <input>&#34;,{size:&#34; 4&#34;})调用.size()方法而不是设置size属性)。因此,可以将以前的代码块写为:

答案 5 :(得分:-10)

的差异:

  1. 没有引用:没有引用时是对象。
  2.   

    访问对象的成员:object.member

    1. 有报价:有报价时是地图。
    2.   

      访问地图的成员:object [member]