之间有什么区别吗?
obj = {'foo': 'bar'}
和
obj = {foo: 'bar'}
我注意到,当我不使用引号时,您无法在密钥中使用-
。但它真的有所作为吗?如果是的话,哪个?
答案 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处尝试。
答案 2 :(得分:9)
这里没有区别。只是风格问题。这样做的原因之一是能够使用“超级”或“类”作为关键,因为这些是保留关键字。
有些人可能会想要传入一个带有空格的字符串,然后调用o ['我可以有空格']但我会称之为不好的做法。
答案 3 :(得分:2)
不,不是javascript。但是,当键周围的引号不存在时,某些JSON解析器将失败。
答案 4 :(得分:1)
在某些情况下,它们是不同的。例如,如果您正在使用jQuery,并且在调用jQuery $()命令创建元素时要创建一个参数列表,则引用的单词将转换为参数,而非引用的单词将转换为函数。例如," size"将设置对象的size属性,并且size(无引号)将调用对象的size()函数。请参阅底部附近的jQuery():
虽然第二个论点很方便,但它的灵活性会导致意想不到的后果(例如$("
<input>
&#34;,{size:&#34; 4&#34;})调用.size()方法而不是设置size属性)。因此,可以将以前的代码块写为:
答案 5 :(得分:-10)
的差异:
访问对象的成员:object.member
访问地图的成员:object [member]