Est-il possible d'utiliser un type numérique comme un objet clé?
Il semble que lorsque j'utilise un type numérique comme un nom de clé dans un objet, il toujours est converti en une chaîne de caractères. Est-il de toute façon à réellement obtenir pour stocker sous forme numérique? La normale typecasting ne semble pas fonctionner.
Exemple:
var userId = 1;
console.log( typeof userId ); //number
myObject[userId] = 'a value';
console.dir(myObject);
Dir De Sortie:
{
'1': 'a value'
}
Ce que je voulez est-ce:
{
1: 'a value'
}
Des conseils?
Grâce
Vous devez vous connecter pour publier un commentaire.
Non, ce n'est pas possible. La clé est toujours converti en chaîne de caractères. Voir Propriété de l'Accesseur docs
length
de la propriété.length
de la propriété. Il n'y a pas d'autre distinction entre une propriété avec un numérique et non-numérique nom (et comme je l'ai mentionné précédemment, un numérique nom de la propriété est converti en chaîne de caractères lors de la définition de la propriété de toute façon).myArray["1"] = foo
, semble à la définition d'une propriété, alors qu'il définit en fait un élément de tableau, mais seulement parce que "1" est une représentation de chaîne de caractères, un entier, qui est complète linguistique non-sens - mais c'est du Javascript.myArray["myProperty"] = foo
, un élément de Tableau ne serait pas créé - le bienmyProperty
serait fixé sur le Tableau, mais indépendamment des éléments du Tableau et de la longueur de la propriété serait pas affectée. Voir la démo. Merci de me faire confiance. Je ne peut avoir qu'un représentant de quelques centaines ici, mais j'ai écrit ce genre de choses, depuis près de deux décennies, et la Matrice de notions de base n'ont pas changé dans le temps.myArray["1"] = foo
n'est pas seulement semble à la définition d'une propriété, il est en fait la définition d'une propriété (avec une touche "1") dans tous les sens de la définition de la propriété. Par exemple,myArray.hasOwnProperty("1")
rendementstrue
. Du point de vue sémantique, cette propriété peut également être considérée comme un "élément" en vertu d'avoir une clé numérique, mais il n'y a plus rien qui le distingue d'un tableau "élément" à partir d'un tableau de propriété. Lire la spec. Si vous êtes toujours en désaccord, merci de citer votre source.Dans un objet, non, mais j'ai trouvé Carte extrêmement utile pour cette application. C'est là que je l'ai utilisé pour les touches numériques, une clé de base de l'événement.
Semble être de par sa conception dans l'ECMA-262-5:
Cependant, je ne vois pas une description précise dans l'ECMA-262-3.
Peu importe, je ne serais pas tenter d'utiliser des chaînes de caractères comme des noms de propriété.
Faire nous avons besoin de quelque chose comme cela?
De la Console:
Objet
1
:
"une valeur"
Je pense que vous pouvez faire ce qui suit si vous souhaitez utiliser le dessus de chose pour y accéder, comme un certain nombre, j'ai fait de même et travaillé.
Cela ne fonctionne que lorsque la clé n'a pas de début et de caractère numérique, sinon ça va être convertie en un nombre. Voir l'exemple suivant:
J'ai utilisé jQuery ici
Mise à jour:
Il peut surmonter le problème ci-dessus. Veuillez indiquer, le mieux, si disponible, et le problème avec cette réponse si il y a des.
Dans JavaScript, des chaînes numériques et les nombres sont interchangeables, de sorte
Si vous voulez vraiment le numéro de la clé pour un objet, vous pourriez vouloir un tableau (c'est à dire créé avec
new Array()
ou[]
).Object.prototype.toString.call(someObject)
Le problème est que vous ne pouvez pas utiliser de Chiffres clés.