Warum, wenn ('k' in 42); Ausnahme auslösen while for ('k' in 42); nicht, in Javascript?

9

Warum funktioniert

aus Sicht des Sprachdesigns? %Vor%

wirft eine TypeError Ausnahme während

%Vor%

nicht?

Ich habe die folgenden Abschnitte in der ECMAScript-Spezifikation gelesen:

Kann jemand die Gründe für eine solche Inkonsistenz erklären?

Warum kann der Ausdruck 'k' in 42 in if (...) nur auf false ausgewertet werden?

    
aztack 20.12.2013, 11:07
quelle

2 Antworten

2

Lesen Sie den Abschnitt im Abschnitt erneut.

%Vor%

42 ist kein Objekt, es ist eine Zahl

%Vor%

for-in-Anweisung benötigt kein Objekt, sondern konvertiert es tatsächlich in ein Objekt

%Vor%

Ich glaube nicht, dass dies ein Grund für dieses Verhalten ist, es ist wahrscheinlich ein Konstruktionsfehler (Inkonsistenz)

    
Silviu Burcea 20.12.2013 11:15
quelle
1

Ich glaube, der Schlüssel hier ist der Unterschied zwischen "operator" ( in ) und "statement" ( for-in ). Wenn Sie den Standard überprüfen, sehen Sie, dass die Letzteren nur Fehler ausgeben, wenn sie falsch geschrieben werden. Der Fall with , der einen SyntaxError (!) Im strikten Modus auslöst, ist ziemlich aussagekräftig.

Offenbar können Sie nicht erraten, ob for (var x in someExpr) falsch geschrieben wurde oder nicht, es sei denn, Sie bewerten someExpr zuerst.

    
raina77ow 20.12.2013 11:33
quelle

Tags und Links