Comment utiliser une variable pour une clé dans un objet JavaScript littérale?
Pourquoi les travaux suivants?
<something>.stop().animate(
{ 'top' : 10 }, 10
);
Alors que cela ne fonctionne pas:
var thetop = 'top';
<something>.stop().animate(
{ thetop : 10 }, 10
);
Pour le rendre encore plus clair: pour le moment, je ne suis pas en mesure de passer à une propriété CSS pour la fonction animate comme une variable.
voir aussi: créer un objet à l'aide des variables nom de la propriété
voir aussi: la création d'objets dynamiques de touches
voir aussi: la création d'objets dynamiques de touches
OriginalL'auteur speendo | 2010-02-16
Vous devez vous connecter pour publier un commentaire.
{ thetop : 10 }
est valable un objet littéral. Le code va créer un objet avec une propriété nomméethetop
qui a une valeur de 10. Les deux suivantes sont les mêmes:Dans l'ES5 et les versions antérieures, vous ne pouvez pas utiliser une variable comme nom de la propriété à l'intérieur d'un objet littéral. Votre seule option est de faire ce qui suit:
ES6 définit ComputedPropertyName dans le cadre de la grammaire pour objet de littéraux, qui permet d'écrire le code comme ceci:
Vous pouvez utiliser cette nouvelle syntaxe dans les dernières versions de chaque intégrer navigateur.
ne fonctionne pas à l'intérieur d'un objet littéral pour la dynamique des noms de propriété, vous devriez juste une erreur. Non seulement cela, mais
eval()
vraiment ne doit pas être utilisé pour de telles choses. Il y a un excellent article sur la bonne et la mauvaise utilisation deeval
: blogs.msdn.com/ericlippert/archive/2003/11/01/53329.aspxpensez à mettre à jour "les versions les plus récentes" et "courant IE TP" avec un peu plus de temps spécifique comme "des Versions plus tard XXX" ou "après 2014-mm" (je voudrais faire changer moi-même, mais je ne sais pas ce que les bonnes valeurs.
pour ES6, est-il un moyen de quitter la propriété, si la clé est null/indéfinis? Par exemple, dans
{[key] : "value"}
, si la clé est nulle, il serait{ null: "value"}
, alors que je voudrais que le résultat soit{}
solution merveilleuse, mais pourquoi vous en savez tant, même la lecture de l'ensemble de la spécification ne pouvait pas obtenir le point:(
OriginalL'auteur Andy E
Avec ECMAScript 2015 vous êtes maintenant en mesure de le faire directement dans l'objet de la déclaration avec les supports de notation:
Où
key
peut être n'importe quelle sorte d'expression (par exemple, une variable) de retourner une valeur.Donc ici votre code devrait ressembler à:
Où
thetop
sera remplacé par la valeur de la variable.OriginalL'auteur kube
ES5 citation qui dit qu'il ne devrait pas travailler
Note: les règles ont changé pour ES6: https://stackoverflow.com/a/2274327/895245
Spec: http://www.ecma-international.org/ecma-262/5.1/#sec-11.1.5
Cela signifie que:
{ theTop : 10 }
est exactement la même que{ 'theTop' : 10 }
La
PropertyName
theTop
est unIdentifierName
, donc il s'est converti à l''theTop'
de la chaîne de valeur, qui est la valeur de la chaîne de'theTop'
.Il n'est pas possible d'écrire les initialiseurs d'objets (littéraux) avec des variables clés.
La seule des trois options sont
IdentifierName
(s'élargit pour littéral de chaîne),StringLiteral
, etNumericLiteral
(également étend sur une chaîne).Je suppose que le downvote était surtout parce que votre réponse n'offre pas une solution, et n'est "pas utile" à cet égard. De vote vers la pression des pairs 🙂
merci pour avoir le courage! 🙂 Mais je pense que j'ai répondu à la question directement: Q: "Pourquoi le travail suivant?". R: parce que ES5 dit. "Que faire?" est implicite. Avez-vous downvote la question pour dire "C'est impossible" sans un standard citation avant que quelqu'un éditées dans l'ES6 solution?
Ah, à droite. En général, je cite les questions spécifiques dans une blockquote claire, quand je réponds directement. Citant le standard peut faire un bon de répondre encore mieux, mais pour l'instant, votre post n'a même pas de répondre à la question de l'omi. En indiquant ce qui peut mettre une clé dans ES5 ne veut pas dire comment ils travaillent. Sûrement
thetop
est unIdentifierName
, donc pourquoi cela ne fonctionne pas? Cette question est encore ouverte.merci encore pour expliquer à moi! J'ai mis à jour pour le rendre plus explicite. Je ne l'avais pas fait avant car je pensais qu'il était évident, parce que nous pouvons écrire
{a:1}.a
, donca
clairement de ne pas étendre la valeur de la variable dans l'identifiant de cas. Mais oui, expliquant en outre une amélioration dans ce cas.OriginalL'auteur Ciro Santilli 新疆改造中心996ICU六四事件
J'ai utilisé les méthodes suivantes pour ajouter une propriété avec une "dynamique" nom à un objet:
key
est le nom de la nouvelle propriété.L'objet de propriétés transmises à
animate
sera{left: 20, width: 100, top: 10}
C'est juste en utilisant le
[]
notation comme recommandé par les autres réponses, mais avec moins de lignes de code!OriginalL'auteur Phil M
Ajoutant des crochets autour de la variable fonctionne bien pour moi. Essayez cette
OriginalL'auteur Vaishali
Code:
Traduction:
Comme vous pouvez le voir, le
{ thetop : 10 }
déclaration ne fait pas usage de la variablethetop
. Au lieu de cela, il crée un objet avec une clé nomméethetop
. Si vous voulez la clé de la valeur de la variablethetop
, alors vous aurez à utiliser des crochets autourthetop
:Le crochet de la syntaxe a été introduit avec l'ES6. Dans les versions antérieures de JavaScript, vous devez effectuer les opérations suivantes:
OriginalL'auteur Benny Neugebauer
Je ne pouvais pas trouver un exemple simple sur les différences entre les ES6 et ES5, j'ai donc fait un. Les deux exemples de code créer exactement le même objet. Mais l'ES5 exemple fonctionne aussi dans les navigateurs plus anciens (comme IE11), wheres l'ES6 exemple qui ne fonctionne pas.
ES6
ES5
OriginalL'auteur Dieter Schmitt
Vous pouvez effectuer les opérations suivantes pour ES5:
Ou d'un extrait d'une fonction:
OriginalL'auteur sh32my
Si vous voulez clé d'objet à être le même que le nom de variable, il ya une petite main dans ES 2015.
De nouvelles notations dans ECMAScript 2015
OriginalL'auteur ROROROOROROR
Vous pouvez le faire de cette façon:
OriginalL'auteur Yury Laykov