2010-12-03 11 views

Respuesta

93

No, las comillas no hacen la diferencia (a menos que, como ha notado, desee utilizar una clave que no sea un identificador JavaScript válido).

Como nota al margen, el JSON data exchange formathace requiere comillas dobles para los identificadores.

+62

En realidad, las cotizaciones _es hacer una diferencia si se utiliza un literal numérico como un nombre de propiedad. Por ejemplo, 'obj = {12e34: true};' no es lo mismo que 'obj = {'12e34': true};'. El primero requeriría que accedieras a la propiedad a través de 'obj ['1.2e + 35']', mientras que para este último usarías 'obj ['12e34']'. [Ver mi respuesta para más detalles.] (Http://stackoverflow.com/a/9568622/96656) –

+1

Verdad, pero sería genial si las comillas dobles fueran opcionales dado el primer carácter + alfa-numérico y puede que algunos fanáticos del espacio en blanco aka espacios invisibles o pestañas? ideal para datos no anidados profundamente. –

4

No hay diferencia aquí. Solo una cuestión de estilo. Una de las razones para hacerlo es poder usar 'super' o 'clase' como clave, ya que son palabras clave reservadas.

Algunas personas pueden tener la tentación de pasar una cadena con espacios en blanco y luego llamar a o ['Puedo tener espacio en blanco'] Pero yo llamaría a esa mala práctica.

3

No, no para javascript. Sin embargo, algunos analizadores JSON fallarán cuando las comillas alrededor de las claves no estén presentes.

+26

Las claves sin comillas no son válidas en JSON. –

103

De Unquoted property names/object keys in JavaScript, mi reportaje sobre el tema:

comillas sólo puede omitirse si el nombre de la propiedad es un literal numérico o a valid identifier name.

[...]

notación de soporte puede ser utilizados sin problemas para todos los nombres de las propiedades.

[...]

notación de puntos puede solamente se utiliza cuando el nombre de la propiedad es un nombre identificador válido.

Tenga en cuenta que las palabras reservadas se pueden usar como nombres de propiedad sin comillas en ES5. Sin embargo, para compatibilidad con versiones anteriores de ES3, sugeriría citarlas de todos modos.

También hice una herramienta que le dirá si un nombre de propiedad determinado puede usarse sin comillas y/o con notación de puntos. Pruébelo en mothereff.in/js-properties.

Screenshot

1

Hay algunas situaciones en que son diferentes. Por ejemplo, si está utilizando jQuery y está haciendo una lista de parámetros para pasar al invocar el comando jQuery $() para crear un elemento, las palabras entrecomilladas se convierten en parámetros y las palabras no citadas se convierten en funciones. Por ejemplo, "tamaño" establecerá el atributo de tamaño del objeto, y el tamaño (sin comillas) llamará a la función de tamaño() en el objeto. Ver jQuery(), cerca de la parte inferior:

Mientras que 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). El bloque de código anterior por lo tanto se podría escribir en cambio, como:

+0

No creo que ese ejemplo diga lo que crees que dice. El problema que ha citado se debe a que jQuery tiene un método llamado tamaño, y el conflicto entre el tamaño del método y el tamaño del atributo se resuelve al seleccionar el método. Hay casos en jQuery donde pasar un _Valor_ como una cadena u otro tipo provoca un cambio en el comportamiento, pero nunca se define una propiedad con un nombre de propiedad válido entre comillas y no entre comillas. –

-8

Diferencias:

  1. No se cita: Es un objeto cuando no hay presupuesto.

acceso de los miembros del objeto: object.member

  1. Tiene cita: es un mapa cuando no hay presupuesto.

acceso del mapa miembro de: Object [miembro]

Cuestiones relacionadas