Nom de propriété d'objet que le nombre
Selon la officiel JavaScript documentation vous pouvez définir l'objet littérale des noms de propriété en utilisant des entiers:
En outre, vous pouvez utiliser un numérique ou littéral de chaîne pour le nom d'une propriété.
Comme suit:
me = {
name: "Robert Rocha",
123: 26,
origin: "Mexico"
}
Ma question est, comment voulez-vous de référence de la propriété qui a un entier comme un nom? J'ai essayé l'habitude me.123
mais j'ai reçu un message d'erreur. La seule solution que je peux penser à est de à l'aide d'un for-in
boucle. Des suggestions?
- Essayez avec
me[123]
comme cette autre façon d'accéder aux propriétés inconnues des objets que vous pouvez passer des variables dans. - Utiliser les support de la notation - comme vous le feriez dans la pour-en-boucle. Vous n'avez pas besoin d'utiliser une variable, vous pouvez passer une valeur explicite.
- Merci pour l'edit Bergi. Comment puis-je intégrer des liens dans le texte sur stackoverflow?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez référencer les propriétés de l'objet, comme vous le feriez d'un tableau et d'utiliser soit
me[123]
oume["123"]
a
est unArray
, vous pouvez affectera[123] = 1
et puisa["123"] = 2
et le même élément du tableau sera changé. De même, sio
est unObject
, vous pouvez définiro[123] = 1
et il donnera la'123'
propriété deo
(exactement comme si vous aviez exécutéo['123'] = 1
. En outre, depuis leArray
instances sont égalementObject
cas, vous pouvez définir et de lirea['xyz']
même sia
est unArray
. L'ensemble de ce comportement est décrit dans la Spécification du Langage ECMAScript.me[123]
est susceptible d'être plus performant.charAt
vscharCodeAt
optimisations de sorte que le code ci-dessous est un peu spécifique, mais comme vous pouvez le voir entier clé de recherche est bien le plus rapide (même des appels àhasOwnProperty
améliorer un peu, ainsi queMap.get
appels). La mise en garde que j'ai trouvé dans les précédentes références est que vous pouvez que integer clés: jsbench.github.io/#f1f9afdba2eac615645c80335c48ed10 jsbench.github.io/#8345886c28796a6d825c292900d01777Point notation ne fonctionne qu'avec des noms de propriété qui sont des identificateurs valides. Un identifiant doit commencer par une lettre, $, _ ou séquence d'échappement unicode. Pour tous les autres noms de propriété, vous devez utiliser le support de la notation.
Dans un objet littéral, le nom de la propriété doit être un nom d'identificateur, un littéral de chaîne numérique ou littéral (qui sera converti en une chaîne de caractères depuis les noms de propriété doivent être des chaînes de caractères):
Vous pouvez utiliser
me[123]
oume["123"]
. Les deux travaux.Vous pouvez utiliser support de la notation
me[123]
.Juste au cas où quelqu'un d'autre a été confondu par ce: à l'aide d'entiers (plutôt que de la chaîne) les noms de propriété peut donner un peu différents, bien que fonctionnellement le même résultats (selon le navigateur) lorsque vous avez des objets à l'intérieur des objets.
Des objets simples avec aucun des objets imbriqués ont un comportement cohérent sur tous les navigateurs (même si que l'on a accepté la réponse dit, nous avons besoin d'utiliser des crochets à la place des points d'accès entier les noms de propriété):
Et cet objet imbriqué avec des clés de chaîne fonctionne exactement comme prévu:
Mais c'est l'équivalent de l'objet imbriqué avec entier touches renvoie des résultats légèrement différents selon le navigateur, mais vous pouvez toujours accéder aux objets imbriqués de la même façon (donc fonctionnellement, il fonctionne toujours de la même façon):
Ce comportement sera toujours légèrement différentes, mais le point de vue fonctionnel, même si par programmation de la construction d'un objet imbriqué. Par exemple, supposons que nous voulions écrire une fonction qui prendrait une liste de paires (par exemple
[[0, 0], [0, 1], [1, 2], [2, 3]]
) et de le convertir en un objet imbriqué nous avons donc pu vérifier si la paire est dans l'objet, avec O(1) temps (par exemple,{0: {0: true, 1: true}, 1: {2: true}, 2: {3, true}}
). Notez que Jeux vérifier référence de l'égalité et de la non valeur de l'égalité, donc nous ne pouvions pas stocker la paire lui-même dans l'Ensemble et obtenir les mêmes résultats:Paires avec des chaînes fonctionnent comme prévu:
Mais dans certains navigateurs, entier paires seront différents, mais fonctionnellement le même:
La situation numérique des noms de propriété semble plus compliqué qu'il est expliqué dans les réponses jusqu'à présent. Il est vrai que vous pouvez accéder à ces propriétés via pour-dans la boucle. Cependant, il peut être important de savoir que pour-en boucle donne les clés des chaînes de caractères, non pas comme des chiffres comme vous vous en doutez:
Une chose semblable se produit au cours de la sérialisation JSON:
Donc, si vous dépend le code de ce petit détail, vous mieux être au courant de cela.