Jak już wspomniałem w poprzedniej lekcji, operatory są jednym z podstawowych elementów tworzących wyrażenia w JavaScript. Począwszy od tej lekcji, będę opisywał je wszystkie. Na początek zacznę od operatorów arytmetycznych.

Operatory arytmetyczne jest to pierwsza grupa operatorów. Wiele z nich powinieneś/powinnaś już znać z pierwszych klas szkoły podstawowej (jeżeli masz je już za sobą i nadal masz z nimi problemy, szczerze radzę usiąść do książek z matematyki zamiast czytać dalej ten kurs). Do tej grupy zaliczają się następujące operatory:

  • + – dodawanie; np. 3 + 2 = 5;
  • - – odejmowanie; np. 3 – 2 = 1;
  • * – mnożenie; np. 3 * 2 = 6;
  • / – dzielenie; np. 3 / 2 = 1.5;
  • % – dzielenie modulo (inaczej reszta z dzielenia); np. 7 % 3 = 1;

Oprócz wymienionych powyżej operatorów które operują na dwóch argumentach, jest także kilka operatorów które operują na jednym argumencie (w skrócie operatory jednoargumentowe). Pierwszym z nich jest minus (-), który może być użyty do zmiany znaku liczby:

k = -n;

Kolejne operatory jednoargumentowe to operatory inkrementacji ++ i dekrementacji --. Pierwszy z nich powoduje zwiększenie wartości zmiennej o jeden, a drugi zmniejszenie o jeden. Można je stosować zarówno w wersji prefiksowej (czyli operator jest przed zmienną), lub postfiksowej (operator jest po zmiennej). Obydwa można tylko stosować względem zmiennej (lub czegokolwiek innego co zachowuje się jak zmienna, czyli pozwala na przypisanie wartości). Oto przykład:

var n = 5;
n++; // n = 6
++n; // n = 7
n--; // n = 6
--n; // n = 5

Różnica pomiędzy operatorami prefiksowymi a postfiksowymi polega na momencie kiedy jest on “uruchamiany” – ma to znaczenie przy bardziej złożonych wyrażeniach. Operatory prefiksowe obliczane są przed wyliczeniem wartości wyrażenia (inaczej mówiąc, JavaScript najpierw zmieni wartość zmiennej, a następnie odczyta i użyje wartość tej zmiennej w wyrażeniu). Operatory postfiksowe są natomiast obliczane po wyliczeniu wartości wyrażenia (tzn. JS najpierw odczyta sobie wartość zmiennej, a następnie zmieni wartość zmiennej.

var n1 = 1, n2 = 2;
var w1 = ++n1 + ++n2; // w1 = 5, n1 = 2, n2 = 3
var k1 = 1, k2 = 2;
var w2 = k1++ + k2++; // w2 = 3, k1 = 2, k2 = 3

Należy także uważać aby nie próbować zmieniać kilka razy wartości jednej zmiennej w trakcie obliczania wyrażenia – standard języka JavaScript nie definiuje co ma się stać w takim przypadku, zatem wyniki mogą być różne na różnych przeglądarkach. Dlatego warto inaczej zapisać swoje wyrażenie aby uniknąć tego problemu. Przykład takiego problematycznego wyrażenia jest poniżej:

var n = 5;
var k = n++ + n++; // k = 10 lub 11

Do grupy operatorów arytmetycznych zaliczają się też nawiasy ( ), które służą do zmiany priorytetu wykonywanych działań. W odróżnieniu od zwykle stosowanego zapisu matematycznego, w JavaScript stosuje się tylko i wyłącznie nawiasy okrągłe, także gdy trzeba je zagnieżdżać (inne typy nawiasów są zarezerwowane do innych celów).

var n = (2 + 3) * 4; // n = 20

Operator + jest także używany do łączenia ciągów znaków, np.:

var s1 = "Witaj";
var s2 = "na stronie";
var s3 = s1 + " " + s2; // s3 = "Witaj na stronie"

W języku JavaScript typy wartości użyte w wyrażeniu mogą być zamienione na inne, w zależności od wymogów operatora. Jest to szczególnie ważne w przypadku operatora +, gdyż w wyniku możesz otrzymać nie to o co Ci chodziło. Poniższa lista pokazuje jakie konwersje są dokonywane

  • suma liczby (Number) i ciągu znaków (String) – liczba zostanie zamieniona na ciąg znaków, wynik będzie ciągiem znaków;
  • suma wartości logicznej (Boolean) i ciągu znaków (String) – wartość logiczna zostanie zamieniona na ciąg znaków (będzie to "true" lub "false"); wynik będzie ciągiem znaków;
  • suma liczby (Number) i wartości logicznej (Boolean) – wartość logiczna zostanie zamieniona na liczbę (0 dla false i 1 dla true); wynik będzie liczbą.

Pozostałe operatory arytmetyczne pracują tylko na liczbach, więc przekazanie im parametrów innych typów spowoduje że język JavaScript będzie próbował konwertować je na liczbę.

Jeżeli chcesz jawnie zamienić ciąg znaków na liczbę, możesz użyć funkcji parseInt() (wynikiem będzie liczba całkowita, lub NaN jeżeli konwersja będzie niemożliwa), lub parseFloat() (wynikiem będzie liczba zmiennoprzecinkowa (rzeczywista), lub NaN jeżeli konwersja będzie niemożliwa). Możesz także dokonać mnożenia wartości przez 1 – wtedy konwersja także zostanie dokonana.

var n1 = "1";
var n2 = "2.5";
var n3 = "3";
n1 = parseInt(n1); // n1 = 1
n2 = parseFloat(n2); // n2 = 2.5
n3 = n3 * 1; // n3 = 3
var suma = n1 + n2 + n3; // suma = 6.5

Aby szybko zamienić wartość na ciąg znaków, możesz dodać do niej pusty ciąg znaków:

var n = 123;
n = n + ""; // n = "123"