Parece que quando eu uso um tipo numérico como um nome de chave em um objeto, ele sempre é convertido em uma string. Existe alguma maneira de armazená-lo como um numérico? O typecasting normal não parece funcionar.
Exemplo:
var userId = 1;
console.log( typeof userId ); // number
myObject[userId] = 'a value';
console.dir(myObject);
Saída Dir:
{
'1': 'a value'
}
O que eu quero é isso:
{
1: 'a value'
}
Adendo?
Respostas:
Não, isso não é possível. A chave sempre será convertida em uma string. Consulte a documentação do acessador de propriedade
fonte
length
propriedade da matriz .myArray["1"] = foo
, parece definir uma propriedade, enquanto na verdade define um elemento de array, mas apenas porque "1" é uma representação de string de um inteiro, o que é um disparate linguístico completo - mas isso é Javascript.myArray["1"] = foo
não apenas parece estar definindo uma propriedade, na verdade está definindo uma propriedade (com a chave "1") em todos os sentidos da definição de propriedade. Por exemplo,myArray.hasOwnProperty("1")
rendimentostrue
. Semanticamente, essa propriedade também pode ser considerada um "elemento" em virtude de ter uma chave numérica, mas não há nada mais que distinga um "elemento" de uma matriz de uma propriedade de uma matriz. Leia as especificações. Se você ainda discorda, por favor, cite sua fonte.Em um objeto, não, mas achei o Map extremamente útil para esta aplicação. Aqui é onde eu o usei para teclas numéricas, um evento baseado em tecla.
fonte
Parece ser por design em ECMA-262-5:
No entanto, não vejo uma especificação definitiva para ele na ECMA-262-3. Independentemente disso, eu não tentaria usar não strings como nomes de propriedade.
fonte
Precisamos de algo assim?
Console: Objeto
1: "um valor"
fonte
Acho que você pode fazer o seguinte se quiser usar o item acima para acessá-lo como um número, fiz o mesmo e funcionou.
Isso funciona apenas quando a chave não começa com um caractere numérico, caso contrário, ele será convertido em um número. Veja o seguinte exemplo:
Eu usei jQuery aqui
Atualizada:
Isso pode superar o problema acima. Por favor, sugira melhor se disponível e problema com esta resposta se houver.
fonte
Em JavaScript, strings numéricas e números são intercambiáveis, então
Se você realmente deseja que o número seja a chave para um objeto, você pode querer um array (ou seja, criado com
new Array()
ou[]
).fonte
Object.prototype.toString.call(someObject)
O problema é que você não pode usar números como chaves.