JavaScript relacioni operatori
Relacioni operatori u stvari predstavljaju upoređivanja. Kada se uporede dve vrednosti kao rezultat se dobija logička vrednost, zavisno od toga kakve su te dve vrednosti međusobno.
Operator | Primer | Asocijativnost |
---|---|---|
Manje | x < y | udesno |
Veće | x > y | udesno |
Manje ili jednako | x <= y | udesno |
Veće ili jednako | x >= y | udesno |
Jednako | x == y | udesno |
Različito | x != y | udesno |
Strogo jednako | x === y | udesno |
Strogo različito | x !== y | udesno |
Većina ovih operatora su nam poznati iz jednačina i nejednačina, s tim što se u programiranju obeležavaju na specifičan način:
x < 10 | ako je x manje od 10 vrednost će biti true a u suprotnom false |
x > 10 | x veće od 10 |
x <= 10 | da li je x manje ili jednako 10 |
x >= 10 | da li je x veće ili jednako 10 |
x == 10 | da li je x jednako 10 |
x != 10 | da li je x različito od 10 |
Izraze sa relacionim i logičkim operatorima retko kada koristimo "same za sebe" samo radi dodele vrednosti. Najčešće ih koristimo u okviru kontrolnih struktura, kako bismo napravili uslov i tako odredili dalji tok programa, koji će zavisiti od toga da li se taj uslov ostvario ili ne. Inače možemo upoređivati ne smo brojeve nego i stringove (tekstualne vrednosti) i logičke vrednosti. Pri tom se stringovi upoređuju po abecedi, a false je "manje" od true.
5 < 10 | tačno |
"aaa" < "b" | tačno |
false < true | tačno |
Kompleksni uslovi
Sa ovime što smo saznali, bismo umeli da uporedimo dve vrednosti. Međutim, šta ako želimo da napravimo kompleksan uslov - npr. da proverimo da li je vrednost neke promenljive između dva broja? Verovatno bismo pokušali da napišemo nešto kao:
10 < x < 15 // neispravno!
Pogledajte zašto je ovo neispravno:
- prvo se upoređuje broj 10 sa promenljivom x
- rezultat tog upoređivanja će biti logička vrednost (true ili false)
- onda se ta logička vrednost upoređuje sa brojem 15
- ako je false računa se kao 0, a true kao 1 - svejedno, oba su manja od 15 i lako dobijamo netačan rezultat
Relacioni operatori uvek povezuju samo dve vrednosti. To znači da ako želimo da ostvarimo ovakav kompleksan uslov moramo da pitamo da li je x veće od 10 i da takođe pitamo da li je x manje od 15. Ova dva uslova vezujemo logičkim operatorom konjukcije, a o ovome detaljno pročitajte u tekstu Logički operatori.
Stroga jednakost
Programeri smatraju da je jedna od najvećih mana JavaScripta to što kao jezik nije strogo tipiziran. To znači da ne moramo unapred da određujemo tipove za promenljive, ne moramo čak ni da dodeljujemo vrednosti istog tipa u istu promenljivu tokom izvršavanja programa.
Ovo stvara probleme početnicima koji često ne znaju gde su napravili grešku. Na mestima gde bi drugi programski jezik prijavio da postoji greška, JavaScript nastavlja da funkcioniše. Sa druge strane, tvorci virtuelne mašine koja izvršava JavaScript program (npr. programeri web čitača) imaju svoje probleme - moraju da se brinu oko stalne automatske provere i konverzije tipova i to tokom izvršavanja programa.
Tako se postavlja sasvim logično pitanje - šta se dešava kada u isti izraz smestimo različite tipove? JavaScript pokušava da ih svede na isti tip, i to konvertujući stringove i logičke vrednosti u brojeve, ako je moguće. Međutim u nekim situacijama ne želimo da se to dešava, već hoćemo da izvršimo striktnu proveru - ne samo vrednosti, već i tipa!
5 == "5" | tačno - string "5" se konvertuje u broj 5 |
5 === "5" | netačno - iako bi se vrednosti poklopile, tipovi se ne slažu |
5 != "5" | netačno - string "5" se konvertuje u broj 5 i onda nisu nejednaki |
5 !== "5" | tačno - iako po vrednosti nisu nejednaki, različiti su im tipovi |
Operacije upoređivanja
Ove operacije najčešće koristimo kako bismo napravili uslov za dalje izvršavanje programa.
if (x > 0) {
console.log("X je pozitivan.");
}
else if (x == 0) {
console.log("X je nula.");
}
else {
console.log("X je negativan.");
}