2015-01-13 17 views

Antwort

10

Die Grammatik für Instanceof ist:

RelationalExpression instanceof ShiftExpression 

pro ECMA-262 §11.8.

Das Interpunktionszeichen { am Anfang einer Anweisung wird als Start eines Blocks angesehen, so dass der folgende } den Block schließt und die Anweisung beendet.

Der folgende instanceof Operator ist der Beginn der nächsten Anweisung, aber es kann nicht am Start sein, weil es von einem RelationalExpression vorangestellt werden muss, damit der Parser bekommt eine Überraschung.

Sie müssen erzwingen {}, um als ein Objekt Literal gesehen werden, indem Sie etwas anderes am Anfang der Anweisung, z.

({}) instanceof Object 
+1

Das ist eine großartige Erklärung, dude (+1). Vielen Dank ! – Christos

1

Wenn Sie versuchen, dieses:

var a = {} 
a instanceof Object 

Ausgänge true, die die erwartete Ausgabe ist.

jedoch in Ihrem Fall

{} instanceof Object 

Die oben nicht wahr ausgibt.

Letzteres ist nicht das gleiche wie das erste. Im ersten Fall erstellen wir ein Objektliteral, im zweiten Fall nicht. Daher erhalten Sie diesen Fehler.

+0

Umm ... Aber warum bellt es auf den Betreiber. Warum erkennt es nicht einmal den Operator? – balteo

+0

@balteo '{}' Dies ist kein Operator in JavaScript. Wir können innerhalb von {}} Paaren von Schlüsseln/Werten platzieren, um ein Objekt zu erstellen. Dies ist die kürzeste Art, ein Objekt in JavaScript zu erstellen. Es ist nicht wie der Aufrufoperator '()', der, wenn er nach einem Funktionsausdruck angehängt wird, dieser Ausdruck ausgeführt wird oder wie '+' operator und so weiter. – Christos

+0

Ich meinte, warum bellt es am 'instanceof'-Operator? – balteo

1

Versuchen

var p = {} 
p instanceof Object 
3

{}, in diesem Zusammenhang ist ein Block, kein Objektliteral.

Sie müssen den Kontext ändern (zum Beispiel, indem sie es in ( und ) Einwickeln) wörtliche es ein Ziel zu machen.

({}) instanceof Object; 
+0

Danke Quentin: es funktioniert. Aber können Sie erklären, warum der Operator nicht erkannt wird? Warum diese Fehlermeldung? – balteo

+1

@balteo - Weil Sie es nach einem Code-Block anstelle eines Objekts setzen. – Quentin

Verwandte Themen