Il semble que lorsque j'utilise un type numérique comme nom de clé dans un objet, il est toujours converti en chaîne. Est-il possible de le stocker sous forme numérique? Le typage normal ne semble pas fonctionner.
Exemple:
var userId = 1;
console.log( typeof userId ); // number
myObject[userId] = 'a value';
console.dir(myObject);
Sortie Dir:
{
'1': 'a value'
}
Ce que je veux, c'est ceci:
{
1: 'a value'
}
Conseil?
Réponses:
Non, ce n'est pas possible. La clé sera toujours convertie en chaîne. Voir la documentation sur l'accesseur de propriété
la source
length
propriété du tableau .myArray["1"] = foo
, semble définir une propriété, alors qu'elle définit en fait un élément de tableau, mais uniquement parce que "1" est une représentation sous forme de chaîne d'un entier, ce qui est un non-sens linguistique complet - mais c'est Javascript.myArray["1"] = foo
ne se contente pas apparaître à définir une propriété, il est en fait de définir une propriété (avec une clé « 1 ») dans tous les sens de la définition de la propriété. Par exemple, lesmyArray.hasOwnProperty("1")
rendementstrue
. Sur le plan sémantique, cette propriété peut également être considérée comme un "élément" du fait qu'elle possède une clé numérique, mais il n'y a rien de plus qui distingue un tableau "élément" d'une propriété de tableau. Lisez les spécifications. Si vous n'êtes toujours pas d'accord, veuillez citer votre source.Dans un objet, non, mais j'ai trouvé Map extrêmement utile pour cette application. Voici où je l'ai utilisé pour les touches numériques, un événement basé sur des clés.
la source
Semble être par conception dans ECMA-262-5:
Cependant, je ne vois pas de spécification précise pour cela dans ECMA-262-3. Quoi qu'il en soit, je n'essaierais pas d'utiliser des non-chaînes comme noms de propriété.
la source
Avons-nous besoin de quelque chose comme ça?
Console: objet
1: "une valeur"
la source
Je pense que vous pouvez faire ce qui suit si vous voulez utiliser la chose ci-dessus pour y accéder comme un numéro, j'ai fait la même chose et j'ai travaillé.
Cela ne fonctionne que lorsque la clé ne commence pas par un caractère numérique, sinon elle sera convertie en nombre. Consultez l'exemple suivant:
J'ai utilisé jQuery ici
Actualisé:
Cela peut surmonter le problème ci-dessus. Veuillez suggérer mieux si disponible et problème avec cette réponse s'il y en a.
la source
En JavaScript, les chaînes numériques et les nombres sont interchangeables, donc
Si vous voulez vraiment que le nombre soit la clé d'un objet, vous voudrez peut-être un tableau (c'est-à-dire créé avec
new Array()
ou[]
).la source
Object.prototype.toString.call(someObject)
Le problème est que vous ne pouvez pas utiliser de nombres comme clés.