Beide foo.bar
y foo["bar"]
auf ein Grundstück auf foo zugreifen, aber nicht unbedingt auf dasselbe Grundstück. Der Unterschied liegt darin, wie bar
interpretiert wird. Bei Verwendung eines Punktes ist das Wort nach dem Punkt der wörtliche Name der Eigenschaft. Bei Verwendung von eckigen Klammern wird der Ausdruck zwischen den Klammern ausgewertet, um den Eigenschaftsnamen zu ermitteln. Während foo.bar
holt die Eigenschaft des Wertes namens “bar”
, foo["bar"]
versucht, den Ausdruck "bar"
und verwendet das in eine Zeichenkette konvertierte Ergebnis als Eigenschaftsname
Die Beschränkung der Punktnotation
wenn wir dieses Projekt nehmen:
const obj = {
123: 'digit',
123name: 'start with digit',
name123: 'does not start with digit',
$name: '$ sign',
name-123: 'hyphen',
NAME: 'upper case',
name: 'lower case'
};
Zugriff auf ihr Eigentum in Punktnotation
obj.123; // SyntaxError
obj.123name; // SyntaxError
obj.name123; // 'does not start with digit'
obj.$name; // '$ sign'
obj.name-123; // SyntaxError
obj.'name-123';// SyntaxError
obj.NAME; // 'upper case'
obj.name; // 'lower case'
All dies ist jedoch kein Problem für die Klammerschreibweise:
obj['123']; // 'digit'
obj['123name']; // 'start with digit'
obj['name123']; // 'does not start with digit'
obj['$name']; // '$ sign'
obj['name-123']; // 'does not start with digit'
obj['NAME']; // 'upper case'
obj['name']; // 'lower case'
Zugriff auf die Variable über Variable :
const variable = 'name';
const obj = {
name: 'value'
};
// Bracket Notation
obj[variable]; // 'value'
// Dot Notation
obj.variable; // undefined