recorrer objetos objeto literales eliminar elemento crear clases buscar array agregar javascript json quotes object-literal

javascript - objetos - ¿Por qué se citan algunas propiedades de objeto literal y otras no?



recorrer array de objetos javascript (5)

Esta pregunta ya tiene una respuesta aquí:

Veo esto todo el tiempo: los literales de los objetos se declaran de manera tal que algunas teclas están rodeadas de comillas y otras no. Un ejemplo de jQuery 1.4.2:

jQuery.props = { "for": "htmlFor", "class": "className", readonly: "readOnly", maxlength: "maxLength", cellspacing: "cellSpacing", rowspan: "rowSpan", colspan: "colSpan", tabindex: "tabIndex", usemap: "useMap", frameborder: "frameBorder" };

¿Cuál es el significado de envolver las dos primeras claves de propiedad ( for y class ) con comillas, mientras que deja las otras sin comillas? ¿Hay alguna diferencia en absoluto?

He estado hurgando en la especificación ECMAScript 5 ; todo lo que he podido encontrar es [ Nota 6 de la Sección 15.12.3, énfasis mío ]:

NOTA 6 Un objeto se representa como una llave de apertura izquierda seguida de cero o más propiedades, separadas por comas, cerradas con una llave de derecha. Una propiedad es una cadena entre comillas que representa la clave o el nombre de la propiedad , dos puntos y, a continuación, el valor de la propiedad de cadena. Una matriz se representa como un corchete izquierdo de apertura seguido de cero o más valores, separados por comas, cerrados con un corchete derecho.

Sin embargo, esto se refiere solo a la estratificación de JSON.


Esas son palabras reservadas para Javascript, y (aunque no es realmente necesario) la sintaxis del lenguaje requiere que se las cite.

Estrictamente hablando, la notación pura "JSON" requiere que todas las cadenas de "clave" sean citadas. Sin embargo, el propio Javascript está bien con claves que son identificadores válidos (pero no palabras reservadas) sin comillas.


Hay una razón en este punto (dos años después) para citar las propiedades literales del objeto. Si uno quiere minimizar su código usando el compilador de cierre, es posible que tenga que hacer que las propiedades sean accesibles a otros archivos de origen. En ese caso, querrán evitar que el compilador renombre los símbolos. Al citar el nombre de la propiedad, el Compilador de cierre no los reducirá (renombrará).

Ver: Eliminación del código que desea conservar.

(Esto se aplica al menos a la configuración ADVANCED_OPTIMIZATIONS).


Javascript tiene muchas palabras reservadas que en realidad no son usadas por el lenguaje que creo que estaban reservadas para un posible uso futuro. class es uno de estos, aunque Javascript no usa clases. Otra es goto y no hay absolutamente ninguna posibilidad de que alguna vez se use. El resultado, sin embargo, es que si desea utilizar estos como una clave json, entonces debe citarse. Hablando estrictamente, es probable que siempre debas citar las claves solo para evitar la posibilidad de que no se caiga en la trampa de palabras reservada sin usar de javascript (recuerda, nunca lo hago).


Las palabras clave de Javascript o las palabras reservadas siempre están entre comillas.


for y la class son palabras clave del lenguaje. Su intérprete arrojaría un SyntaxError cuando no se citan.

Consulte la sección 7.6.1.1 en la especificación a la que está vinculado.