JavaScript对象属性的单引号和双引号有何区别?

12

JavaScript对象中的属性/方法名称是否用引号包裹会有区别吗?

例如,以下两者之间有何不同:

var obj1 = {
  property1 : "Value 1",
  method1 : function() {
    return true;
  }
};

var obj2 = {
  "property1" : "Value 1",
  "method1" : function() {
    return true;
  }
};
2个回答

11

JavaScript中没有区别。但是如果属性名称是保留字(例如class)或包含无效字符(例如first-name),则必须将其用引号括起来。


1
所以,我认为这只是一个编码风格的问题。但由于JavaScript必须引用保留字,所以更一致的做法是始终引用属性/方法。 - Jindřich Mynarz
2
@jindrichm:是的,您可以在引用所有属性名称方面保持一致,但另一方面,您也可以在使用有效变量名称作为属性名称方面保持一致。通常我不使用引号,但我对任何一种风格都没有特别的执着......请注意,如果您使用的属性名称不是有效的变量名称,您将无法使用点符号来访问属性:myObject.myProperty,但您将被限制使用下标符号:myObject['myProperty'] - Daniel Vassallo

5

在ES 3之前,你需要引用语言的保留字(如new、default、class等)。然而,在新版本中,这将是不必要的。

但由于ES 5尚未得到很好的支持,因此您需要坚持引用所有保留字

如果您不想记忆完整的单词列表,则最好引用所有内容。

额外信息:这就是为什么元素上没有floatclass属性。相反,您必须使用cssFloat / styleFloatclassName

另一个补充是您需要在JSON字符串中引用每个键。原因是他们希望它与语言无关,以避免像ES3中的愚蠢限制。


我认为你指的是ES3,因为当ES4被放弃时,ES3.1只是被重命名ES5 - Christian C. Salvadó
是的,我只是打字太快了,忘记检查了,谢谢指出拼写错误... :) - gblazex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接