Answers:
不,引号不会有任何区别(除非如您所述,除非您想使用不是有效的JavaScript标识符的键)。
作为一个侧面说明,JSON数据交换格式 确实需要标识周围的双引号(和它不会让单引号)。
从非上市属性名称/在JavaScript对象键,我写了关于这个问题的:
如果属性名称是数字文字或有效的标识符名称,则只能省略引号。
[…]
括号符号可以安全地用于所有属性名称。
[…]
点符号只能在属性名称是有效的标识符名称时使用。
请注意,在ES5中允许将保留字用作未引用的属性名称。但是,为了向后兼容ES3,我建议无论如何都要引用它们。
我还制作了一个工具,该工具将告诉您是否可以使用任何给定的属性名称而无需使用引号和/或点号。在mothereff.in/js-properties中尝试一下。
在某些情况下它们是不同的。例如,如果您使用的是jQuery,并且在调用jQuery $()命令创建元素时要传递的参数列表,则将带引号的单词转换为参数,将非带引号的单词转换为函数。例如,“ size”将设置对象的size属性,而size(不带引号)将在对象上调用size()函数。看到底部的jQuery():
尽管第二个参数很方便,但它的灵活性可能会导致意外的结果(例如$(“
<input>
”,{size:“ 4”})调用.size()方法而不是设置size属性)。因此,可以将先前的代码块编写为:
obj = { 12e34: true };
与并不相同obj = { '12e34': true };
。前者要求您通过访问obj['1.2e+35']
,而后者则需要使用obj['12e34']
。请参阅我的答案以获取更多详细信息。