2012-01-02 17 views
25

¿Esto está permitido?Objeto Javascript: tecla que comienza con el número, ¿permitido?

myObj = {}; 
myObj['4a56546s6d'] 

o la tecla debe comenzar con una letra como:

myObj = {}; 
myObj['x4a56546s6d'] 

¿Puedo mezclar tanto como:

myObj = {}; 
myObj['x4a56546s6d'] 
myObj['4a56546s6d'] 

te pido que por tantos (por ejemplo, una identificación en HTML) debe comenzar con una letra. Tengo en este momento el third version y el fireBug marca las teclas (comenzando con un número) en azul.

+2

Si no se permitía, se obtendría un error. –

Respuesta

47

Puede usar cualquier tecla si utiliza [string] para acceder a la tecla, incluso la tecla con espacio. Todos estos son válidas:

myObj['key with space'] 
myObj['12345'] 

Pero si desea utilizar puntos . operador para acceder a la clave a continuación, la tecla debe ser un identificador válido lo que significa que no pueden comenzar con un número o contener el espacio.

6

Ver esta página: https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Variables

identificador Un JavaScript debe comenzar con una letra, subrayado (_) o un signo de dólar ($); los caracteres siguientes también pueden ser dígitos (0-9). Debido a que JavaScript distingue entre mayúsculas y minúsculas, las letras incluyen los caracteres "A" a "Z" (mayúsculas) y los caracteres "a" a "z" (minúsculas).

Se puede utilizar de esa manera, pero no será capaz de acceder a los datos mediante el uso de myObj.4a56546s6d porque a partir de un identificador con un número no está permitido.

0

Si su clave (nombre de propiedad) es una cadena literal, es perfectamente válido tener un dígito como primer carácter.

Consulte las respuestas para la pregunta this para obtener más información sobre las claves válidas en JS.

16

Por operador de punto puede obtener acceso a valores de claves que no contienen espacios ni caracteres especiales, palabras que comienzan por número (es decir, aquellos que no pueden usarse como nombres variables); de lo contrario, puede obtener cualquier referencia para ellos como claves en la matriz asociativa.

Puede usar como clave todo lo que desee, pero recuerde que la clave será una representación de cadena de lo que ingresó. Aclaración: se llamará a String().

Look:

var myObj = {}; 

myObj[ 3 ] = "key is 3"; 
alert(myObj[ "3" ]); //alerts "key is 3" because (3).toString() is "3" 
//but an error will thrown when accessing by myObj.3 

myObj[ {} ] = "key is {}" 
alert(myObj["[object Object]"]) // alerts "key is {}" because ({}).toString() is "[object Object]" 

Puede anular toString() método, por ejemplo:

Object.prototype.toString = function(){ return "object"} 

a = {}; 
a[ {} ] = "whatever"; 
alert(a["object"]); // alerts "whatever" because as now toString() returns "object" from each created object 
+12

Ejemplos muy ilustrativos, +1. Pero niños, no anulen los métodos 'Object.prototype' en casa. Es muy peligroso. –

Cuestiones relacionadas