Respuestas:
No, las comillas no marcan la diferencia (a menos que, como ha señalado, desee utilizar una clave que no sea un identificador de JavaScript válido).
Como nota al margen, el formato de intercambio de datos JSON hace requerir dobles comillas identificadores (y no , no permita que las comillas simples).
De los nombres de propiedad sin comillas / claves de objeto en JavaScript , mi escrito sobre el tema:
Las comillas solo se pueden omitir si el nombre de la propiedad es un literal numérico o un nombre de identificador válido .
[...]
La notación de corchetes se puede usar de manera segura para todos los nombres de propiedades.
[...]
La notación de puntos solo se puede usar cuando el nombre de la propiedad es un nombre de identificador válido.
Tenga en cuenta que las palabras reservadas pueden usarse como nombres de propiedad sin comillas en ES5. Sin embargo, para la compatibilidad con ES3, sugiero citarlos de todos modos.
También creé una herramienta que le dirá si algún nombre de propiedad puede usarse sin comillas y / o con notación de puntos. Pruébelo en mothereff.in/js-properties .
No hay diferencia aquí. Solo es cuestión de estilo. Una de las razones para hacer esto es poder usar 'super' o 'clase' como clave, ya que esas son palabras clave reservadas.
Algunas personas podrían verse tentadas a pasar una cadena con espacios en blanco y luego llamar o ['Puedo tener espacios en blanco'] Pero yo llamaría a eso una mala práctica.
No, no a javascript. Sin embargo, algunos analizadores JSON fallarán cuando las comillas alrededor de las claves no estén presentes.
Hay algunas situaciones en las que son diferentes. Por ejemplo, si está usando jQuery, y está haciendo una lista de parámetros para pasar al llamar al comando jQuery $ () para crear un elemento, las palabras entre comillas se convierten en parámetros y las palabras no entre comillas se convierten en funciones. Por ejemplo, "tamaño" establecerá el atributo de tamaño del objeto, y tamaño (sin comillas), llamará a la función size () en el objeto. Ver jQuery () , cerca de la parte inferior:
Si bien el segundo argumento es conveniente, su flexibilidad puede conducir a consecuencias no deseadas (por ejemplo, $ ("
<input>", {size: "4"}) llamando al método .size () en lugar de establecer el atributo de tamaño). Por lo tanto, el bloque de código anterior podría escribirse como:
obj = { 12e34: true };no es lo mismo queobj = { '12e34': true };. El primero requeriría que acceda a la propiedad a travésobj['1.2e+35'], mientras que para el segundo lo usaríaobj['12e34']. Vea mi respuesta para más detalles.