2016-10-12 2 views
2

Ich bin auf Chromium Version 53.0.2785.143 auf Ubuntu Errichtet auf Ubuntu 16.04 (64-Bit)JavaScript Schritt unärer Operator (++) auf Strings

Nach dem ECMAScript® Language Specification wird Präfix Inkrementoperator wie folgt bewertet :

Prefix Increment Operator evaluation steps

Vor diesem Hintergrund kann ich dieses Ergebnis nicht erklären:

++'1'; 
> Uncaught ReferenceError: Invalid left-hand side expression in prefix operation 

wenn der follo Flügel Code wirkt wie ein Zauber:

var x = '1'; 
++x; 
> 2 

Soweit ich verstehe, in beiden Fällen sind die ersten drei Aufzählungspunkte des zweiten Schritts sind wahr, während für ++'1' Fall die vierte Kugel auch wahr ist (aber warum?) und für den ++x Fall ist es falsch, was keinen Fehler hervorruft. Habe ich recht?

PS: Firefox wirft ein SyntaxError: invalid increment operand anstelle eines ReferenceError

+1

Sie den gleichen Fehler, wenn Sie do ++ 1, übrigens –

+1

'PutValue ('1', 2)' wirft einen Fehler, weil es einem String-Literal nicht zuweisen kann. Sie benötigen eine Variable oder eine andere Art von 'Referenz'. – Bergi

Antwort

10

Das Problem ist, dass Ihr ++ Operator implizit beinhaltet eine Zuordnung, und Sie können keinen neuen Wert auf eine String-Konstante zuweisen. Beachten Sie, dass

++2; 

auch aus dem gleichen Grund fehlerhaft ist.

+0

... was vermutlich in '5 passiert. Aufruf PutValue (expr, newValue) '? – deceze

+0

Ja, das stimmt. – Pointy

+0

Oh .. Ich habe das verpasst. Danke für die Antwort! – iulian

3

In meinem Verständnis ist ++ ähnlich wie += 1.

So wird es für ++x arbeiten, wie es zu x+=1 oder x=x+1 ausgewertet werden, aber ++'1' ist ein Zeichenfolgenliteral und hat nicht hand Wert links zuweisen, damit scheitert es

+0

Sie können sogar buchstäblich "1" = Nummer ('1') + 1 'eingeben und erhalten den gleichen Fehler – Bergi

+0

Da linker Wert nicht gültig ist. du kannst nicht '' 1'' als Variablennamen haben – Rajesh

+0

Oh .. das habe ich verpasst. Danke für die Antwort! – iulian

Verwandte Themen