Outre le fait évident que le premier formulaire pourrait utiliser une variable et pas seulement un littéral de chaîne, y a-t-il une raison de les utiliser l'une par rapport à l'autre, et si oui, dans quels cas?
Dans du code:
// Given:
var foo = {'bar': 'baz'};
// Then
var x = foo['bar'];
// vs.
var x = foo.bar;
Contexte: j'ai écrit un générateur de code qui produit ces expressions et je me demande lequel est préférable.
javascript
syntax
object-literal
Mark Renouf
la source
la source
Réponses:
(Provenant d' ici .)
La notation entre crochets permet d'utiliser des caractères qui ne peuvent pas être utilisés avec la notation par points:
y compris les caractères non ASCII (UTF-8), comme dans
myForm["ダ"]
( plus d'exemples ).Deuxièmement, la notation entre crochets est utile lorsqu'il s'agit de noms de propriété qui varient de manière prévisible:
Roundup:
Un autre exemple de caractères qui ne peuvent pas être utilisés avec la notation par points est les noms de propriété qui contiennent eux-mêmes un point .
Par exemple, une réponse json peut contenir une propriété appelée
bar.Baz
.la source
La notation entre crochets vous permet d'accéder aux propriétés par nom stockées dans une variable:
obj.x
ne fonctionnerait pas dans ce cas.la source
Les deux façons les plus courantes d'accéder aux propriétés en JavaScript sont avec un point et des crochets. Les deux
value.x and value[x]
accèdent à une propriété sur la valeur, mais pas nécessairement à la même propriété. La différence réside dans la façon dont x est interprété. Lorsque vous utilisez un point, la partie après le point doit être un nom de variable valide et il nomme directement la propriété. Lorsque vous utilisez des crochets, l'expression entre les crochets est évaluée pour obtenir le nom de la propriété. Alors que value.x récupère la propriété de la valeur nommée "x", value [x] essaie d'évaluer l'expression x et utilise le résultat comme nom de propriété.Donc, si vous savez que la propriété qui vous intéresse s'appelle «longueur», dites-vous
value.length
. Si vous voulez extraire la propriété nommée par la valeur contenue dans la variablei
, dites-vousvalue[i]
. Et parce que les noms de propriété peuvent être une chaîne, si vous souhaitez accéder à une propriété nommée“2”
ou“John Doe”
, vous devez utiliser des crochets:value[2] or value["John Doe"]
. C'est le cas même si vous connaissez le nom précis de la propriété à l'avance, car aucun“2” nor “John Doe”
n'est un nom de variable valide et n'est donc pas accessible via la notation par points.En cas de tableaux
Les éléments d'un tableau sont stockés dans des propriétés. Étant donné que les noms de ces propriétés sont des nombres et que nous devons souvent obtenir leur nom à partir d'une variable, nous devons utiliser la syntaxe des crochets pour y accéder. La propriété length d'un tableau nous indique le nombre d'éléments qu'il contient. Ce nom de propriété est un nom de variable valide, et nous connaissons son nom à l'avance, donc pour trouver la longueur d'un tableau, vous écrivez généralement
array.length
parce que c'est plus facile à écrire quearray["length"]
.la source
The elements in an array are stored in properties
c'est ce qui me déroute. Qu'entendez-vous par stocké dans des propriétés? Quelles sont les propriétés? Dans ma compréhension, le tableau n'est qu'un tas de valeurs sans propriétés. S'ils sont stockés dans des propriétés, comment se fait-il que ce ne soit pasproperty: value
/ tableau associatif?La notation par points ne fonctionne pas avec certains mots clés (comme
new
etclass
) dans Internet Explorer 8.J'avais ce code:
Et cela déclenche le redouté "indentifier attendu" (au moins sur IE8 sur windows xp, je n'ai pas essayé d'autres environnements). La solution simple pour cela est de passer à la notation entre crochets:
la source
Soyez prudent lorsque vous utilisez ces notations: par exemple. si nous voulons accéder à une fonction présente dans le parent d'une fenêtre. Dans IE:
n'est pas équivalent à
Nous pouvons soit utiliser:
ou
pour y accéder
la source
D'une manière générale, ils font le même travail.
Néanmoins, la notation entre crochets vous donne la possibilité de faire des choses que vous ne pouvez pas faire avec la notation par points, comme
Cela peut être étendu à toute propriété contenant des caractères spéciaux.
la source
Vous devez utiliser des crochets si les noms de propriété ont des caractères spéciaux:
A part ça, je suppose que c'est juste une question de goût. À mon humble avis, la notation par points est plus courte et il est plus évident qu'il s'agit d'une propriété plutôt que d'un élément de tableau (bien que, bien sûr, JavaScript n'ait pas de tableaux associatifs de toute façon).
la source
Vous devez utiliser la notation entre crochets lorsque -
Le nom de la propriété est le numéro.
Le nom de la propriété a un caractère spécial.
Le nom de la propriété est affecté à une variable et vous souhaitez accéder à la valeur de la propriété par cette variable.
la source
La notation entre parenthèses peut utiliser des variables, elle est donc utile dans deux cas où la notation par points ne fonctionnera pas:
1) Lorsque les noms de propriété sont déterminés dynamiquement (lorsque les noms exacts ne sont pas connus avant l'exécution).
2) Lorsque vous utilisez une boucle for..in pour parcourir toutes les propriétés d'un objet.
source: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects
la source
Cas où la
[]
notation est utile:Si votre objet est dynamique et qu'il peut y avoir des valeurs aléatoires dans des clés comme
number
et[]
ou tout autre caractère spécial, par exemple -var a = { 1 : 3 };
Maintenant, si vous essayez d'accéder comme
a.1
il le fera par une erreur, car il attend une chaîne là-bas.la source
La notation par points est toujours préférable. Si vous utilisez un IDE ou un éditeur de texte "plus intelligent", il affichera des noms non définis de cet objet. Utilisez la notation entre parenthèses uniquement lorsque vous avez le nom avec des tirets similaires ou quelque chose de similaire invalide. Et aussi si le nom est stocké dans une variable.
la source
Math.sqrt(25)
, mais pasMath['sqrt'](25)
.Permettez-moi d'ajouter un autre cas d'utilisation de la notation entre crochets. Si vous voulez accéder à une propriété disons
x-proxy
dans un objet, alors-
sera mal interprété. Il y a aussi d'autres cas comme l'espace, le point, etc., où le fonctionnement du point ne vous aidera pas. De plus, si vous avez la clé dans une variable, le seul moyen d'accéder à la valeur de la clé dans un objet est la notation entre crochets. J'espère que vous obtenez un peu plus de contexte.la source
Un exemple où la notation par points échoue
la source