2011-04-26 12 views
5

¿Puede haber alguna vez haber una diferencia entre:JavaScript literales de objetos: los nombres de propiedades como cadenas vs. "en bruto"

var x = { 
    hello: 'world' 
}; 

y

var x = { 
    'hello': 'world' 
}; 

?

Es decir, ¿bajo qué condiciones el hecho de dar un nombre de propiedad como una cadena tiene resultados diferentes a los dados como un nombre "crudo"? Por ejemplo, sé que var x = {}; x['@£$%'] = 'bling!'; es válido (ya que cualquier cadena puede ser una propiedad), pero [email protected]£$% = 'bling!' no funcionará. Ni las palabras clave del lenguaje voluntad o palabras clave reservadas como nombres de propiedades (por lo var x = {for: 'good', class: 'y'}; no funcionarán.

Algo más?

Por ejemplo, ¿qué pasaría si

var hello = 'goodbye'; 

se define en el ejemplo anterior? O algo cosa, como

function hello() { 
    return 'goodbye'; 
} 

?

¿Debo hacer siempre que mi propiedad nombre cadenas, solo para estar seguro?

+0

tener un vistazo a [esta cuestión] (http://stackoverflow.com/questions/2348867/why-are-s ome-object-literal-properties-quoted-and-others-not) – Flash

Respuesta

3

Casi nunca especifico nada más allá de a-zA-Z como mi clave, así que realmente no me preocupo por caracteres como @. Si por alguna razón realmente necesitas estos personajes, entonces seguro y usa comillas.

Si no está seguro de la palabra clave es una reserved word o incluso remotamente piensan que puede ser, simplemente se envuelve entre comillas y estar seguro .. de lo contrario sólo tiene que ir quoteless y ahorrar tiempo de escribir.

Una variable con el mismo nombre que su clave no tiene absolutamente ninguna relación, ya que se toma literalmente.

var hello = 'god'; 
({hello:2})['hello'] // 2 
1

En un literal de objeto, puede utilizar un literal de cadena (citado) o un identificador (sin comillas). En el primer caso, puede usar los caracteres que quiera, mientras que en el segundo, debe seguir las reglas de los identificadores establecidos en el ECMAScript spec. Las mismas reglas de identificador se aplican cuando se utiliza el acceso de propiedad de notación de punto. resumen simplificado:

  • El identificador debe comenzar con una letra, _ o $ (ambos de los cuales también pueden aparecer en cualquier parte del identificador)
  • Después de que el primer carácter, se permiten más caracteres, incluyendo números de
  • el identificador no debe ser una palabra reservada (new, var, function, delete, etc)
+0

¿Por qué esta respuesta no se sube más? –

Cuestiones relacionadas