2011-02-15 16 views
10

Tengo una pregunta sobre el nombre de la propiedad del objeto JavaScript. Echa un vistazo a los códigos siguientes:Una pregunta sobre el nombre de propiedad del objeto JavaScript

<!DOCTYPE html> 
<meta charset="UTF-8"> 
<title>An HTML5 document</title> 
<script> 
    var obj = { 
     123: 'go' // 123 is not a valid JavaScript name. No error here. 
    }; 
    var obj2 = { 
     123a: 'go' // An Error occurred. 
    }; 
</script> 

Si el nombre de la propiedad de un objeto de JavaScript JavaScript es un identificador válido, cotizaciones objeto de nombre porperty no son necesarios.

E.g.

({go_go: 'go'}); // OK 
({go-go: 'go'}); // Fail 

En los códigos anteriores, 123a es un nombre no válido JavaScript y no es ser citados. Entonces, se produjo un error. Pero 123 también es un nombre JavaScript no válido y tampoco está citado, ¿por qué no hay un error aquí? Personalmente creo que debe citarse 123.

¡Gracias!

+0

thats javascript for ya. Creo que tienes un error por no tener; al final de sus declaraciones de var – Matt

+0

@Matt: No, JavaScript tiene una inserción de punto y coma automática bastante sofisticada; solo, no confíe en ello, las cosas pueden salir terriblemente mal cuando omite puntos y comas en lugares críticos. –

+1

@Marcel Gracias. He añadido ';'. – weilou

Respuesta

19

Tener un vistazo a la specification:

 
ObjectLiteral : 
    { } 
    { PropertyNameAndValueList } 
    { PropertyNameAndValueList ,} 

PropertyNameAndValueList : 
    PropertyAssignment 
    PropertyNameAndValueList , PropertyAssignment 

PropertyAssignment : 
    PropertyName : AssignmentExpression 
    get PropertyName (){ FunctionBody } 
    set PropertyName (PropertySetParameterList){ FunctionBody } 

PropertyName : 
    IdentifierName 
    StringLiteral 
    NumericLiteral 

Así que un nombre de propiedad puede ser un nombre de identificador, una cadena o un número. 123 es un número, mientras que 123a no es ninguno de los anteriores.

+0

Gracias por su respuesta. Tu respuesta es correcta. – weilou

8

La parte clave de cada par clave-valor se puede escribir como cualquier identificador válido JavaScript, una cadena (envuelto en comillas) o un número:

var x = { 
    validIdentifier: 123, 
    'some string': 456, 
    99999: 789 
}; 

Ver la especificación: http://bclary.com/2004/11/07/#a-11.1.5

+0

Gracias por su respuesta. Tu respuesta es correcta. – weilou

0

123 no es, per-se, un nombre de propiedad no válido. Cualquier nombre de propiedad que no sea una cadena se encapsula en una cadena con el método toString.

+2

No; ver la respuesta de Félix para saber qué está mal. Solo puedes usar '123a' como' PropertyName' cuando encierras ese nombre de propiedad dentro de los caracteres de comillas; además, solo puede acceder a dicha propiedad usando la notación de corchetes ('object [" 123a "]'). –

Cuestiones relacionadas