javascript - ¿Cuál es la diferencia entre claves de objeto con y sin comillas?

CorePress2024-01-25  9

¿Hay alguna diferencia entre

obj = {'foo': 'bar'} 

y

obj = {foo: 'bar'}

He notado que no puedes usar - en la clave cuando no uso las comillas. ¿Pero realmente hace una diferencia? En caso afirmativo, ¿cuál?



------------------------------------

No, las comillas no marcan la diferencia (a menos que, como notó, desee utilizar una clave que no sea un identificador de JavaScript válido).

Como nota al margen, el formato de intercambio de datos JSON requiere comillas dobles alrededor de los identificadores (y no permite comillas simples).

3

110

En realidad, las comillas pueden marcar la diferencia si utiliza un literal numérico como nombre de propiedad. Por ejemplo, obj = {12e34: verdadero}; no es lo mismo que obj = { '12e34': true };. El primero requeriría que accedas a la propiedad a través de obj['1.2e+35'], mientras que para el segundo usarías obj['12e34']. Vea mi respuesta para más detalles.

- Mathias Bynens

6 de marzo de 2012 a las 12:18

1

Es cierto, pero sería brillante si las comillas dobles fueran opcionales dado el primer carácter a-z + alfanumérico y, ¿pueden algunos fanáticos de los espacios en blanco, también conocidos como espacios invisibles o tabulaciones? ideal para datos que no están profundamente anidados.

- Viernes Rey

23 de enero de 2016 a las 2:01

3

@MathiasBynens dice que puede hacer una diferencia para el literal numérico, pero yo diría que la mejor manera de pensar en esto es que la propiedad que usted define/accede siempre es conv.conectado a una cuerda. Así que no se trata sólo de literales numéricos, sino de cualquier propiedad que no sea una cadena y que, cuando se convierte en una cadena, produzca un "valor de texto" diferente. p.ej. obj[{}] intentará acceder a la propiedad '[objeto Objeto]' en lugar de una propiedad '{}' porque ({}).toString() es '[objeto Objeto]' y no solo {} entre comillas.

- Vencovsky

4 de junio de 2022 a las 15:48



------------------------------------

De nombres de propiedades sin comillas/claves de objetos en JavaScript, mi artículo sobre el tema:

Las cotizaciones solo puedense omitirá si el nombre de la propiedad es un literal numérico o un nombre de identificador válido.

[…]

La notación entre corchetes se puede utilizar de forma segura para todos los nombres de propiedades.

[…]

La notación de puntos solo se puede utilizar cuando el nombre de la propiedad es un nombre de identificador válido.

Tenga en cuenta que se permite el uso de palabras reservadas como nombres de propiedades sin comillas en ES5. Sin embargo, para lograr compatibilidad con versiones anteriores de ES3, sugeriría citarlos de todos modos.

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

0



------------------------------------

Aquí no hay diferencia. Sólo es cuestión de estilo. Una de las razones para hacer esto es poder usar 'super' o 'class' como clave, ya que son palabras clave reservadas.

Algunas personas pueden 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.

1

48

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

- Ned Batchelder

3 diciembre 2010 a las 18:27



------------------------------------

Hay algunas situaciones en las que son diferentes. Por ejemplo, si está utilizando jQuery y está creando 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 sin comillas se convierten en funciones. Por ejemplo, "tamaño" establecerá el tamaño aEl atributo del objeto y el tamaño (sin comillas) llamarán a la función size() en el objeto. Ver jQuery(), cerca del final:

Si bien el segundo argumento es conveniente, su flexibilidad puede tener consecuencias no deseadas (por ejemplo, $( "<input>", {size: "4"} ) llamar 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:

1

1

No creo que ese ejemplo diga lo que tú crees. El problema que has citado es porquejQuery 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 seleccionando el método. Hay casos en jQuery en los que pasar un Valor como una cadena u otro tipo provoca un cambio en el comportamiento, pero nunca al definir una propiedad con un nombre de propiedad válido entre comillas o sin comillas.

- Alex Weitzer

18 de mayo de 2015 a las 22:53

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare