Dessa inkrementoperatörer och motsvarande minskningsoperatörer är kanske lite förvirrande för alla som inte har stött på dem tidigare.
Till att börja med finns det flera olika sätt att lägga till eller subtrahera ett.
i = i + 1;
i + = 1;
i ++;
++i;
För att subtrahera ett finns det samma fyra val med - ersatt för varje +.
Så varför exakt ger JavaScript (och andra språk) så många olika sätt att göra samma sak? Nåväl, för en sak är några av dessa alternativ kortare än andra och innebär mindre att skriva. Att använda + = gör det enkelt att lägga till valfritt nummer och inte bara ett till en variabel utan att behöva ange variabelns namn två gånger.
Det förklarar fortfarande inte varför både i ++ och ++ jag finns eftersom båda bara kan användas för att lägga till en och båda har samma längd. Anledningen till de två alternativen är att dessa inte riktigt är avsedda att användas som fristående uttalanden men är verkligen utformade för att kunna integreras i mer komplexa uttalanden där du faktiskt uppdaterar mer än en variabel i en uttalande. uppdaterar faktiskt mer än en variabel i ett uttalande.
Det enklaste uttalandet är förmodligen följande:
j = i ++;
Detta uttalande uppdaterar värdena på båda variablerna i och j i ett uttalande. Saken är att medan ++ i och jag ++ gör samma sak när det gäller att uppdatera jag gör de olika saker med avseende på uppdatering av andra variabler. Ovanstående uttalande kan skrivas som två separata uttalanden som detta:
j = i;
i + = 1;
Observera att om man kombinerar dem betyder det att vi har åtta tecken istället för 13. Naturligtvis är den längre versionen mycket tydligare när det gäller att beräkna vilket värde j kommer att ha.
Om vi nu tittar på alternativet:
j = ++ i;
Detta uttalande motsvarar följande:
i + = 1;
j = i;
Detta betyder naturligtvis att j nu har ett annat värde än vad det hade i det första exemplet. Positionen för ++ antingen före eller efter variabelns namn styr om variabeln ökas före eller efter att den har använts i påståendet att den används i.
Exakt samma gäller när du tänker på skillnaden mellan --i och i-- där positionen för - bestämmer om en subtraheras före eller efter att värdet har använts.
Så när du använder det separat som ett enda uttalande gör det ingen skillnad om du placerar det före eller efter variabelns namn (förutom en mikroskopisk hastighetsskillnad som ingen någonsin kommer att märka). Det är först när du kombinerar det med ett annat påstående att det gör skillnad i värdet som tilldelas någon annan variabel eller variabler.