Warum die folgende SyntaxWarum kann ich nicht direkt auf eine Eigenschaft eines Objektliterals zugreifen?
{a:1,b:2}.constructor
ungültig ist, während
[1,2].constructor
gültig ist?
Warum die folgende SyntaxWarum kann ich nicht direkt auf eine Eigenschaft eines Objektliterals zugreifen?
{a:1,b:2}.constructor
ungültig ist, während
[1,2].constructor
gültig ist?
{a:1,b:2}.constructor
ist nicht ungültige Syntax, aber es ist mehrdeutig, weil {}
einen Block oder ein Objekt bezeichnet? Sie müssen also den Ausdruck mit Klammern wie ({a:1,b:2}).constructor
disambiguieren. Jetzt weiß JavaScript, dass Sie ein Objekt verwenden möchten.
Wenn Sie diese Syntax in einem Kontext verwenden, wo es eindeutig ein Objekt ist, dann gibt es keine Zweideutigkeit:
console.log({a:1,b:2}.constructor) // works fine
Kurven Klammern am Anfang einer Zeile wird als code block anstelle von object literal erkannt. Wenn Sie sich den Fehler in der Konsole ansehen, sehen Sie Uncaught SyntaxError: Unexpected token :
. Der Fehler liegt also nicht darin, den -Konstruktor Eigenschaft aufzurufen.
Auch, wenn Sie in der Konsole schreiben
{a:1}
JS interpretiert dies als einen Block mit einem label und nicht ein Objekt mit Eigenschafts a
.
'({a: 1, b: 2}). Constructor' – elclanrs