2016-03-11 5 views

Antwort

35

{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 
13

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.

+0

What a ist' Linie? Semikolon-abhängige Sprachen (vor allem JS mit seinen lustigen Regeln) wissen nichts über Linien. Aber '; {1: 2} .constructor' ist ungültig. Vielleicht meintest du "Aussage" oder "Ausdruck" über "Linie"? – cat

+1

@tac, yep, 'Aussage' hier scheint richtiger zu sein – Grundy

Verwandte Themen