带引号的对象键和不带引号的区别是什么?

有什么区别吗?

obj = {'foo':'bar'} 

 obj = {foo: 'bar'} 

我注意到你不能使用-在你不使用引号的时候。 但它确实有所作为? 如果是,那是什么?

不,引号没有什么区别(除非,正如你所说的,你想使用一个不是有效的JavaScript标识符的密钥)。

作为一个方面说明, JSON数据交换格式 确实需要双引号标识符。

JavaScript中未引用的属性名称/对象键 ,我写了关于这个主题:

如果属性名称是数字文字或有效的标识符名称,则只能省略引号。

[…]

括号符号可以安全地用于所有的属性名称。

[…]

点符号只能在属性名称是有效的标识符名称时使用。

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

我也做了一个工具,告诉你是否可以使用任何给定的属性名称而不用引号和/或点符号。 在mothereff.in/js-properties上试试。

截图

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

有些人可能会试图传递一个string与空白,然后调用o ['我可以有空白']但是我会把这种不好的做法。

不,不是JavaScript。 但是,一些JSONparsing器将不会出现键引号周围时失败。

有些情况下他们是不同的。 例如,如果您正在使用jQuery,并且在调用jQuery $()命令创build元素时要创build要传递的参数列表,则会将引用的单词转换为参数,将非引号单词转换为函数。 例如,“size”将设置对象的size属性,而size(不带引号)将调用对象的size()函数。 看到附近的jQuery() :

虽然第二个参数很方便,但它的灵活性会导致意想不到的结果(例如调用.size()方法的$(“ <input> ”,{size:“4”}),而不是设置size属性。 之前的代码块可以写为:

区别:

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

访问对象的成员:object.member

  1. 有报价有报价的时候是地图。

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