2009-03-09 12 views
-1
var a = [1,4,5]; 
var e = a.length--; 

Hier e Variable 5. enthalten Aber wenn ich tun:Feldlänge

var e = a.length-=1; 

Hier e wird 2 die Anzahl der Array-Elemente enthalten.
Also die erste ist eine Sprache "Tipp" zu simulieren ein Pop() Array-Methoden?

In der Sprachsyntax Tun:

a-- 

oder

a-=1 

ist semantisch gleich.

+3

Wo ist die Frage in Ihrem Beitrag? – Cerebrus

+0

Also der erste ist eine Sprache "Tipp", um eine Pop() Array-Methoden zu simulieren? – xdevel2000

Antwort

5
var a = [1, 4, 5]; 
var e = a.length--; 

ist die gleiche wie

var a = [1, 4, 5]; 
var e = a.length; 
a.length = a.length - 1; 

während

var a = [1, 4, 5]; 
var e = a.length -= 1; 

ist die gleiche wie

var a = [1, 4, 5]; 
a.length = a.length - 1; 
var e = a.length; 

und

var a = [1, 4, 5]; 
var e = --a.length; 

Mit anderen Worten: x-- gibt den Wert vor dem Verringern zurück, während --x (und X - = 1) den Wert nach dem Verringern zurückgibt. Alle diese Codefragmente legen das letzte Element aus dem Array ab.

Beachten Sie, dass in dem ersten Beispiel e = a.length--, e den Wert 3, nicht mehr als 5 haben, daher ist es nicht die gleiche wie a.pop().

2

Dies ist eine grundlegende Missverständnis: Wenn Sie a++ bewerten, wird eine ausgewertet und dann erhöht, während ++a oder a+=1 wird zuerst erhöht werden, dann ausgewertet.

In den meisten Fällen ist es besser, diese Art von Anweisungen ausführlicher zu schreiben, da sie schnell zu Verwirrung über das führen können, während nichts erreicht wird (die meisten Compiler/Interpreter optimieren dies ohnehin).

1

Das ist nicht was ich bekomme.

Eher bekomme ich das erwartete Ergebnis. e = 3 in der ersten Instanz und e = 2 in der zweiten.

Im ersten Fall ist a.length zunächst 3 (weil Javascript-Arrays spärlich sind). Bei Verwendung des Nach-Dekrements wird dieser Wert (3) zuerst e zugewiesen, dann wird a.length dekrementiert (witzigerweise ist dies tatsächlich möglich).

Im zweiten Fall wird 1 von 3 subtrahiert, um 2 zu bilden, was dann zu e zugewiesen wird.

Also ich glaube nicht, dass da etwas Besonderes passiert.

1
var a = [1,4,5]; 
var e = a.length--; 

e wird nicht enthalten 5.Er enthält 3.

Der - postix decrement Operator wird hier keinen Unterschied machen. a.length ist 3. Die zweite Anweisung übersetzt:

  • abrufen Arraylänge (Ergebnis: 3)
  • speichere das Ergebnis in der Variablen „e“ genannt
  • Dekrement Arraylänge (dieser Schritt hat keine Auswirkung auf die Gesamt Ergebnis für diese Standalone-Probe)

Während:

var a = [1,4,5]; 
var e = a.length-=1; 

hier e wird enthalten 2.

Die zweite Anweisung übersetzt

  • Arraylänge (Ergebnis: 3) abrufen
  • Dekrement Arraylänge (Ergebnis: 2)
  • speichere das Ergebnis in Variable mit dem Namen „e "

In jedem Fall sind Sie mit der array.length Eigenschaft, die Sie nicht tun sollten. Es verursacht die Art von bösen Bug, die schwer zu finden ist, weil es das Ergebnis einer Nebenwirkung ist, die Sie wahrscheinlich nicht vorhatten oder denken.

0

oh ja ich lese diese aus dem Buch: Object Oriented Javascript auf Seite 112

Die Methode push() fügt ein neues Element am Ende des Arrays. Die pop() -Methode entfernt das letzte Element. a.push ('new') funktioniert genau wie a [a.length] = 'new' und a.pop() ist das gleiche wie a.length--.

und ohne den Code versuche ich die Frage posten !!!

Entschuldigung. Also ich denke, das ist ein Buchfehler, weil pop() das letzte Element zurückgibt, wo a.length-- das Array schrumpfen, aber das Element nicht zurückgibt, sondern die Arraylänge -1

Verwandte Themen