Vezérlőpult
3. Operátorok és kifejezések · Alapok

1. blokk · Alapok · 3. fejezet

Operátorok és kifejezések

Az operátorok azok a jelek, amelyekkel műveleteket végzünk: összeadunk, összehasonlítunk, logikai döntéseket hozunk. A kifejezés olyan kódrészlet, amelynek értéke van. Ebben a fejezetben a számolástól a logikai döntésekig mindent végigveszünk — a hírhedt == vs === különbséget, a rövidzárat, a feltételes ? : operátort és a Math objektum leggyakoribb függvényeit.

Élő gyakorló12 feladat automatikus ellenőrzéssel≈ 1 óra

Tanulási célok

1Operátor és kifejezés

A kifejezés bármi, aminek értéke van: egy szám (42), egy változó (ar), egy művelet eredménye (ar * 1.27) vagy egy összehasonlítás (keszlet > 0). Az operátor a műveletet végző jel (+, >, &&…), az operandusok pedig azok az értékek, amelyeken dolgozik.

const ar = 6990;
const brutto = ar * 1.27;      // "ar * 1.27" egy kifejezés; a * az operátor, ar és 1.27 az operandusok
const draga = brutto > 10000;  // ez is kifejezés — értéke false
console.log(brutto, draga);    // 8877.3 false

Kifejezés mindenhová írható, ahová érték: console.log-ba, változó értékének, template literál ${}-jába, másik kifejezés belsejébe. A fejezet végéig operátorok szerint haladunk.

2Aritmetikai operátorok

OperátorJelentésPéldaEredmény
+összeadás (szövegnél összefűzés!)10 + 313
-kivonás10 - 37
*szorzás10 * 330
/osztás (tizedes eredmény is lehet)10 / 42.5
%maradék (modulo)10 % 31
**hatványozás2 ** 101024

A ** az ES2016-ban jött; korábban a Math.pow(2, 10) volt az egyetlen mód — mindkettő működik. A / egész számoknál is tizedes törtet adhat; ha egész hányados kell, kerekíts (Math.floor).

A % — a maradék sokoldalú

A maradékos osztás első látásra ritkán hasznos, valójában rengeteg mintában felbukkan:

const szam = 4721;
console.log(szam % 2 === 0);    // false — páros-e? (a maradék 0, ha páros)
console.log(szam % 10);         // 1 — az utolsó számjegy
console.log(szam % 100);        // 21 — az utolsó két számjegy

const ora = 23;
console.log((ora + 3) % 24);    // 2 — körbeforgás: 23 óra + 3 óra = hajnali 2

const mp = 125;
console.log(mp % 60);           // 5 — a percen felüli másodpercek
✅ JEGYEZD MEG

x % n mindig 0 és n-1 közé esik (pozitív x-re) — ezért tökéletes „körbeforgatáshoz": óra a napon belül, nap a héten belül, pozíció egy listában. És x % n === 0 pontosan azt jelenti: x osztható n-nel.

3Értékadó operátorok

Az alap értékadás a =: a jobb oldali kifejezés értékét a bal oldali változóba teszi. A rövidített formák egyszerre olvassák és módosítják a változót — ezért csak let-tel deklarált változón működnek:

Rövid formaUgyanaz, mintTipikus használat
x += 3x = x + 3összegzés, szöveg építése
x -= 3x = x - 3készlet csökkentése
x *= 2x = x * 2duplázás
x /= 2x = x / 2felezés
x %= 7x = x % 7körbeforgatás
x++ / x--x = x + 1 / x = x - 1számlálás
let keszlet = 40;
keszlet -= 3;           // eladtunk 3-at → 37
keszlet++;              // egyet visszahoztak → 38

let osszeg = 0;
osszeg += 6990;         // 6990
osszeg += 1990;         // 8980 — így gyűjtünk egy kosár értékét

let nev = "Egér";
nev += " (fekete)";     // szövegre is: "Egér (fekete)"
⚠️ A = NEM EGYENLŐSÉG!

A = értékadás („tedd bele"), nem összehasonlítás. Az „egyenlő-e?" kérdés operátora a ===. Ha egy feltételbe véletlenül =-t írsz, nem hibát kapsz, hanem rossz eredményt — ez az egyik leggyakoribb kezdő hiba.

4Összehasonlítás: == vs ===

Az összehasonlító operátorok két értéket vetnek össze, és logikai eredményt (true / false) adnak. Ez az eredmény változóba tehető, kiírható, és a következő fejezettől feltételként használjuk.

OperátorJelentésPélda → eredmény
===szigorúan egyenlő (érték és típus)5 === 5 → true, "5" === 5 → false
!==szigorúan nem egyenlő5 !== 3 → true
>   <nagyobb / kisebb7 > 3 → true
>=   <=nagyobb-egyenlő / kisebb-egyenlő5 >= 5 → true
==   !=laza egyenlőség (típusátalakítással) — kerüljük"5" == 5 → true (!)

A leghíresebb buktató

Kétféle „egyenlő" van JavaScriptben:

console.log(5 === 5);          // true
console.log("5" === 5);        // false — más a típus (string vs number)
console.log("5" == 5);         // true  — a == átalakítja, ezért egyenlőnek látja
console.log(0 == "");          // true  (!!)
console.log(0 == "0");         // true  (!!)
console.log("" == "0");        // false (!!!) — pedig az előző kettő szerint „egyenlők" lennének
console.log(null == undefined);   // true
console.log(null === undefined);  // false
⛔ MINDIG === ÉS !==

A == rejtett típusátalakítása nehezen megtalálható hibák forrása. Alapszabály: mindig a === és !== párost használd. Ha két különböző típusú értéket akarsz összevetni, alakítsd át előbb te (Number(szoveg) === 5) — így látszik a szándék. Az egyetlen szokásos kivétel a x == null, ami egyszerre szűri a null-t és az undefined-ot; de kezdőként írd ezt is ===-vel.

Szövegeket is lehet </>-vel hasonlítani — betűrend szerint, de a kódtábla alapján: minden nagybetű kisebb minden kisbetűnél, az ékezetes betűk pedig a végén vannak. Rendezéshez ezért később mást használunk (8. fejezet).

5Logikai operátorok, rövidzár, truthy/falsy

A logikai operátorok igaz/hamis értékeket kombinálnak — így épülnek az összetett feltételek:

OperátorNeveMikor igaz
a && bÉS (and)ha mindkét oldal igaz
a || bVAGY (or)ha legalább az egyik oldal igaz
!aNEM (not)megfordítja: igazból hamis, hamisból igaz
const ar = 6990, keszlet = 40;
console.log(ar < 10000 && keszlet > 0);   // true — olcsó ÉS raktáron
console.log(ar > 50000 || keszlet > 0);   // true — drága VAGY raktáron (elég az egyik)
console.log(!(keszlet === 0));             // true — NEM fogyott el
console.log(keszlet !== 0);                // ugyanaz, olvashatóbban

Truthy és falsy

A logikai operátorok nem csak true/false-szal működnek: bármilyen értéket „igaznak" (truthy) vagy „hamisnak" (falsy) tekintenek. A falsy értékek köre kicsi, tanuld meg fejből:

Falsy (hamisnak számít) — csak ezekTruthy (igaznak számít)
false, 0, "" (üres szöveg), null, undefined, NaNminden más: 1, -3, "szöveg", "0" (!), " " (szóköz!), [], {}

A Boolean(x) megmutatja, melyik: Boolean("0")true, mert a "0" nem üres szöveg. Ugyanezt teszi a dupla tagadás is: !!x.

Rövidzár (short-circuit) — és amit visszaad

Az && és a || balról jobbra értékel, és megáll, amint eldőlt az eredmény: a && az első falsy-nál, a || az első truthy-nál. Ráadásul nem true/false-t adnak vissza, hanem azt az operandust, amelyiknél megálltak:

console.log("" || "Vendég");        // "Vendég" — a bal falsy, ezért a jobb oldalt adja
console.log("Anna" || "Vendég");    // "Anna"   — a bal truthy, meg sem nézi a jobbat
console.log(0 || 10);               // 10
console.log(5 && "ok");             // "ok" — a bal truthy, ezért a jobb oldalt adja
console.log(0 && "ok");             // 0    — a bal falsy, itt megáll

Ebből születik a leggyakoribb minta, az alapérték: const nev = bejovoNev || "Vendég"; — ha van név, az marad; ha üres/hiányzik, „Vendég" lesz.

⚙️ HOL JÖN ELŐ NODE-BAN?

Validációnál a rövidzár mindennapos. A lapozási paraméter hiányozhat vagy hibás lehet — egy Express-kezelőben így adunk alapértéket: const oldal = Number(req.query.oldal) || 1; Ha a paraméter hiányzik (undefinedNaN), üres ("" → 0) vagy szöveg ("abc" → NaN), mind falsy, és az 1 lép a helyébe. Az && pedig a „csak ha létezik" ellenőrzésre jó: felhasznalo && felhasznalo.email.

ℹ️ ELŐRE: ??

A || a 0-t is lecseréli alapértékre, ami néha nem kívánatos (a 0 érvényes mennyiség lehet). Erre való a modern ?? operátor, amely csak null/undefined esetén ad alapértéket — a 9. fejezetben jön.

6A feltételes operátor (? :)

A feltételes (más néven ternary, azaz háromoperandusú) operátor egy sorban választ két érték közül a feltétel alapján:

// feltétel ? érték_ha_igaz : érték_ha_hamis
const keszlet = 0;
const allapot = keszlet > 0 ? "raktáron" : "elfogyott";
console.log(allapot);                                  // elfogyott

const szam = 7;
console.log(szam % 2 === 0 ? "páros" : "páratlan");   // páratlan

const ar = 12000;
const fizetendo = ar >= 10000 ? ar * 0.9 : ar;          // a két ág kifejezés is lehet → 10800
console.log(`Fizetendő: ${fizetendo} Ft`);

Olvasd így: „ha a készlet nagyobb nullánál, akkor „raktáron", különben „elfogyott"". Ez egy kifejezés — értéke van, ezért változóba tehető, kiírható, template literálba írható. A következő fejezet if/else szerkezete ugyanezt tudja, de utasításként, több sorban.

✅ MIKOR TERNARY, MIKOR if?

Ternary akkor, ha egy értéket választasz két lehetőség közül, és egy sorban elfér. Ha a két ágban több utasítás kell, vagy egymásba kellene ágyazni több ternaryt — az már if/else. Az egymásba ágyazott ternary olvashatatlan, kerüld.

7A Math objektum

A Math beépített objektum matematikai függvényeket és állandókat gyűjt. Nem kell létrehozni, bárhol elérhető — Node-ban és böngészőben ugyanúgy. A leggyakoribbak:

FüggvényMit csinálPéldák
Math.round(x)legközelebbi egészre kerekít (.5 felfelé)Math.round(2.5) → 3, Math.round(2.4) → 2, Math.round(-2.5) → -2
Math.floor(x)lefelé kerekít („padló")Math.floor(2.9) → 2, Math.floor(-2.1) → -3
Math.ceil(x)felfelé kerekít („plafon")Math.ceil(2.1) → 3, Math.ceil(25 / 10) → 3
Math.trunc(x)levágja a tizedeseket (nulla felé)Math.trunc(2.9) → 2, Math.trunc(-2.9) → -2
Math.abs(x)abszolút értékMath.abs(-8) → 8, Math.abs(4 - 10) → 6
Math.min(a, b, …)a legkisebb a megadottak közülMath.min(3, 9, 1) → 1, Math.min(meret, 50) → felső korlát
Math.max(a, b, …)a legnagyobbMath.max(3, 9, 1) → 9, Math.max(0, egyenleg) → alsó korlát
Math.pow(a, b)hatvány (ugyanaz, mint a ** b)Math.pow(2, 8) → 256
Math.sqrt(x)négyzetgyökMath.sqrt(144) → 12
Math.PIa π állandó (nem függvény, nincs zárójel)2 * Math.PI * r
Math.random()véletlen szám 0 és 1 között (0 ≤ x < 1)csak említjük — a 11. fejezetben használjuk
const db = 25, dobozMeret = 10;
console.log(Math.ceil(db / dobozMeret));       // 3 — a megkezdett doboz is számít

const kert = "500";
const meret = Math.min(Number(kert) || 10, 50);  // 50 — alapérték + felső korlát egy sorban
console.log(meret);
⚠️ round ≠ floor ≠ trunc

Pozitív számoknál a floor és a trunc ugyanazt adja, negatívaknál nem (floor(-2.1) = -3, trunc(-2.1) = -2). Áraknál, darabszámoknál általában round; „hány egész fér bele" kérdésre floor; „hány kell, hogy elférjen" kérdésre ceil.

8Műveleti sorrend (precedencia)

Az operátoroknak — a matematikához hasonlóan — elsőbbségi sorrendjük van. Az erősebb köt előbb; azonos szintűek balról jobbra. A gyakorlatban ezt a sorrendet érdemes fejben tartani (fentről lefelé csökkenő erősség):

SzintOperátorok
1.( ) zárójel
2.! tagadás, typeof, ** hatvány
3.*   /   %
4.+   -
5.<   <=   >   >=
6.===   !==
7.&&
8.||
9.? : feltételes
10.= += … értékadás (a leggyengébb: mindent kiszámol, aztán tárol)
console.log(2 + 3 * 4);          // 14 — előbb a szorzás
console.log((2 + 3) * 4);        // 20 — a zárójel előrébb sorol
console.log(10 - 4 - 3);         // 3  — azonos szint: balról jobbra, (10-4)-3
console.log(5 > 3 && 2 + 2 === 4);   // true — aritmetika, aztán összehasonlítás, végül &&
console.log(true || false && false);  // true — az && erősebb: true || (false && false)
✅ ZÁRÓJELEZZ BÁTRAN

Nem kell fejből tudni a teljes táblázatot. Ha egy kifejezésben && és || is van, vagy egy ternary feltétele összetett, tegyél zárójelet — pl. (ev % 4 === 0 && ev % 100 !== 0) || ev % 400 === 0. Olvashatóbb, és biztosan azt csinálja, amit szeretnél.

9Élő kód — próbáld ki!

Kísérletezz az operátorokkal! Különösen érdemes a == vs === mintát, a rövidzár visszatérési értékét és a Math kerekítéseit negatív számokkal kipróbálni. Írj át egy-egy értéket, és tippeld meg előre a kimenetet.

JavaScript-gyakorló

Válassz mintát vagy írj sajátot — majd Futtatás (Ctrl+Enter) ↓

A kimenet itt jelenik meg…

10Feladatok

Döntések elágazás nélkül: minden feladat megoldható kifejezésekkel — ternaryvel, logikai operátorokkal, Math-tal és a %-kal. (Az if és a ciklusok a következő fejezetben jönnek — most szándékosan nem használjuk őket.) Az adott változókat a gyakorló hozza létre, te csak használd őket, és írd ki pontosan a kért formában.

Gyakorló feladatok

⭐ alap · ⭐⭐ haladó · ⭐⭐⭐ kihívás — a haladásod ebben a böngészőben megmarad.

Kész: 0 / 0
✅ ELŐBB TIPPELJ, AZTÁN FUTTASS

A kifejezés-kiértékelős feladatoknál írd le magadnak fejben az eredményt, mielőtt futtatnál. Ha eltér, nézd meg, melyik operátor kötött másképp, mint gondoltad — így rögzül a precedencia. Ha bizonytalan vagy egy részkifejezésben, írd ki külön console.log-gal.

11Összegzés

  1. Aritmetika: + - * / % **. A % a maradék: páros-e (% 2 === 0), utolsó számjegy (% 10), körbeforgás (% 24).
  2. Értékadás: = és rövid formái (+=, -=, *=, ++, --) — csak let-en. A = nem egyenlőség!
  3. Összehasonlítás: === !== < > <= >= → logikai érték. Mindig ===; a == típusátalakítása kiszámíthatatlan (0 == "" igaz).
  4. Logikai: && (mindkettő), || (legalább egy), ! (tagadás). Falsy: false, 0, "", null, undefined, NaN — minden más truthy ("0" is!).
  5. Rövidzár: az &&/|| megáll, amint eldőlt, és az adott operandust adja vissza → alapérték: Number(param) || 1.
  6. Feltételes operátor: feltétel ? haIgaz : haHamis — egy sorban választ két érték közül; kifejezés, tehát változóba tehető.
  7. Math: round / floor / ceil / trunc, abs, min / max, pow / sqrt, PI, (random).
  8. Precedencia: zárójel → ! *** / %+ - → összehasonlítás → ===&&||? :=. Kétség esetén zárójelezz.
➡️ KÖVETKEZŐ LÉPÉS

Most már tudsz feltételeket megfogalmazni — a következő fejezetben ezekre építünk a vezérlési szerkezetekkel: if/else több utasítással, switch, és a ciklusok (while, for), amelyekkel ismételni és számlálni, összegezni, keresni fogunk.