2010-02-27 7 views
27

Veo esto todo el tiempo: literales de objetos declarados de manera que algunas teclas están rodeadas de comillas y otras no. Un ejemplo de jQuery 1.4.2:¿Por qué se citan algunas propiedades de objeto literal y otras no?

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 citas, dejando a los demás en cotizaciones menos? ¿Hay alguna diferencia en absoluto?

He estado hurgando en el ECMAScript 5 specification; 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 izquierda de apertura seguida de cero o más propiedades , separado con comas, cerrado con una llave derecha. Una propiedad es una cadena entrecomillada que representa la clave o el nombre de propiedad, dos puntos, y luego el valor de propiedad de string . Se representa una matriz como un corchete izquierdo de apertura seguido de cero o más valores, separados con comas, cerrado con un corchete derecho.

Sin embargo, esto se refiere sólo a la stringification de JSON.

+0

Véase también [? ¿Cuál es la diferencia entre las teclas de objeto con comillas y sin comillas] (http://stackoverflow.com/questions/4348478/what-is-the-difference-between-object-keys-with-quotes-and-without-quotes) – Bergi

+1

¿Cómo puede ser esto un duplicado de una pregunta que se hizo diez meses después? Ustedes lo entendieron al revés. – raven

+1

@raven: La respuesta a la otra pregunta es mejor, y aparentemente no deberían fusionarse. Mi bandera fue rechazada. : P – Ryan

Respuesta

37

Esas son palabras reservadas de Javascript, y (aunque no es realmente necesario) la sintaxis del lenguaje requiere que sean citadas.

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

2

Las palabras clave del lenguaje Javascript o las palabras clave reservadas siempre están rodeadas de comillas.

1

for y class son palabras clave. Su intérprete arrojaría un SyntaxError cuando no se mencionen.

Consulte la sección 7.6.1.1 en la especificación que ha vinculado.

+0

Mi intérprete (FF10) no tira nada en '{for: 1, class: 1, null: 1}' y los trata como teclas normales. –

+0

Consulte http://mathiasbynens.be/notes/javascript-properties para obtener más información. –

1

Javascript tiene muchas palabras reservadas que el lenguaje no usa realmente y creo que estaban reservadas para un posible uso futuro. class es uno de estos aunque Javascript no usa clases. Otro es goto y no hay absolutamente ninguna posibilidad de que alguna vez se utilice. El resultado, sin embargo, es que si desea utilizarlos como una clave json, debe citarse. Estrictamente hablando, probablemente siempre deberías citar tus claves solo para evitar la posibilidad de caer en la trampa de la palabra reservada no utilizada de JavaScript (ten en cuenta que nunca lo hago).

5

Hay un motivo en este punto (dos años más tarde) para citar las propiedades del objeto literal. Si uno quiere minificar su código usando el Closure Compiler, puede que necesite hacer que las propiedades sean accesibles a otros archivos fuente. En ese caso, querrán evitar que el compilador cambie el nombre de los símbolos. Al citar el nombre de la propiedad, el compilador de cierre no los miniaturizará (cambiará el nombre).

Ver: Removal of code you want to keep

(. Esto se aplica a al menos el ajuste ADVANCED_OPTIMIZATIONS)

Cuestiones relacionadas