Parece que cuando uso un tipo numérico como nombre de clave en un objeto, siempre se convierte en una cadena. ¿Hay alguna forma de almacenarlo como un número? El encasillado normal no parece funcionar.
Ejemplo:
var userId = 1;
console.log( typeof userId ); // number
myObject[userId] = 'a value';
console.dir(myObject);
Salida Dir:
{
'1': 'a value'
}
Lo que quiero es esto:
{
1: 'a value'
}
¿Consejo?
Respuestas:
No, esto no es posible. La clave siempre se convertirá en una cadena. Ver los documentos de Accessor de propiedad
fuente
length
propiedad de la matriz .myArray["1"] = foo
, parece estar configurando una propiedad, mientras que en realidad establece un elemento de matriz, pero solo porque "1" es una representación de cadena de un entero, lo cual es una completa tontería lingüística, pero eso es Javascript.myArray["1"] = foo
no solo parece establecer una propiedad, de hecho, es establecer una propiedad (con una clave "1") en todos los sentidos de la definición de propiedad. Por ejemplo,myArray.hasOwnProperty("1")
rendimientostrue
. Semánticamente, esta propiedad también se puede considerar un "elemento" en virtud de tener una clave numérica, pero no hay nada más que distinga un "elemento" de matriz de una propiedad de matriz. Lea la especificación. Si aún no está de acuerdo, cite su fuente.En un objeto, no, pero he encontrado que Map es extremadamente útil para esta aplicación. Aquí es donde lo he usado para teclas numéricas, un evento basado en claves.
fuente
Parece ser por diseño en ECMA-262-5:
Sin embargo, no veo una especificación definitiva para ello en ECMA-262-3. Independientemente, no intentaría usar no cadenas como nombres de propiedad.
fuente
¿Necesitamos algo como esto?
Consola: Objeto
1: "un valor"
fuente
Creo que puede hacer lo siguiente si desea utilizar lo anterior para acceder a él como un número, hice lo mismo y trabajé.
Esto solo funciona cuando la tecla no comienza con un carácter numérico, de lo contrario, se convertirá en un número. Vea el siguiente ejemplo:
Usé jQuery aquí
Actualizado:
Puede superar el problema anterior. Sugiera algo mejor si está disponible y problema con esta respuesta si la hay.
fuente
En JavaScript, las cadenas numéricas y los números son intercambiables, por lo que
Si realmente desea que el número sea la clave de un objeto, es posible que desee una matriz (es decir, creada con
new Array()
o[]
).fuente
Object.prototype.toString.call(someObject)
El problema es que no puede usar números como claves.