Vezérlőpult
2. Változók és adattípusok · Alapok

1. blokk · Alapok · 2. fejezet

Változók és adattípusok

A programok adatokkal dolgoznak: terméknevekkel, árakkal, készlettel, igen/nem válaszokkal. Ezeket változókban tároljuk, és mindegyiknek van egy típusa. Ebben a fejezetben megtanulod a let és const használatát, az alaptípusokat, a template literált — és azt, hogyan alakítod a szöveget számmá és vissza, ami a szerveroldali kód mindennapi feladata.

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

Tanulási célok

1Mi a változó? let, const, var

A változó egy névvel ellátott „doboz", amelyben egy értéket tárolunk. A nevén keresztül később bármikor elérjük és felhasználjuk — nem kell újra beírni, és ha megváltozik, csak egy helyen kell átírni.

let ar = 6990;          // "ar" nevű doboz, benne a 6990 érték
console.log(ar);         // 6990 — a doboz tartalmát írjuk ki
console.log(ar * 2);     // 13980 — kifejezésben is használható

Változót háromféle kulcsszóval hozhatunk létre. A deklaráció (létrehozás) és az értékadás egy lépésben is mehet:

const nev = "Vezeték nélküli egér";   // állandó: nem fog megváltozni
let keszlet = 40;                     // változó: később módosítjuk
let utolsoRendeles;                   // deklaráció érték nélkül → undefined
var regi = 1;                         // régi módszer — ma már kerüljük
KulcsszóMikor használjuk
constHa az érték nem fog változni — ez az alapértelmezett választás.
letHa az értéket később módosítani kell (számláló, összeg, állapot).
varRégi kulcsszó (ES6 előtt); modern kódban nem használjuk — furcsa hatókör-szabályai vannak, régi kódban még találkozol vele.

2let vs const

A let-tel létrehozott változó értéke később újra megadható, a constnem — ha mégis megpróbálod, hibát kapsz:

let keszlet = 40;
keszlet = 39;                  // OK: a let újraértékadható
keszlet = keszlet - 1;         // OK: a régi értékből számoljuk az újat → 38

const nev = "Egér";
nev = "Billentyűzet";          // TypeError: Assignment to constant variable.
✅ ELŐSZÖR MINDIG const

Írj alapból const-ot, és csak akkor válts let-re, ha tényleg módosítanod kell az értéket. Így a kódot olvasva azonnal látszik, mi az, ami változhat — és a véletlen felülírást a gép jelzi.

ℹ️ ELŐRE: A const NEM „FAGYASZTJA LE" AZ OBJEKTUMOT

A const azt tiltja, hogy a változóhoz másik értéket rendelj. Ha a változóban egy objektum vagy tömb van (7. és 6. fejezet), annak a belseje továbbra is módosítható: const kosar = []; kosar.push("Egér"); teljesen rendben van. Ezért látsz majd szinte mindenhol const-ot — most csak jegyezd meg.

3Elnevezési szabályok

HelyesHelytelen
ar, teljesAr, termek_nev, $elem2ar (számmal kezdődik)
keszlet, aktiv2, MAX_DB (állandóknál szokás)teljes ar (szóköz), teljes-ar (kötőjel), let (kulcsszó)
✅ BESZÉLŐ NEVEKET ADJ

A jó változónév elárulja, mit tárol: bruttoAr jobb, mint x; vasarloNeve jobb, mint vn. A kódot sokkal többször olvassuk, mint írjuk — egy hónap múlva te sem fogod tudni, mi volt az a2.

4Adattípusok és typeof

Minden értéknek van típusa. Az alaptípusok (primitívek), amelyekkel most dolgozunk:

TípusMit tárolPélda
numberSzám — egész és tizedes tört ugyanaz a típus42, 3.14, -7, 6990
stringSzöveg, idézőjelben"Egér", 'kábel', `sablon`, "" (üres)
booleanLogikai: igaz / hamistrue, false
undefined„Nincs még értéke" — deklarált, de be nem állított változólet x;x értéke undefined
null„Szándékosan üres" — mi állítjuk be, hogy nincs értéklet kupon = null;

Később jönnek az összetett típusok: tömb (6. fejezet), objektum (7. fejezet), függvény (5. fejezet).

typeof — melyik típus?

A typeof operátor egy szövegben megadja az érték típusának nevét:

console.log(typeof 42);          // "number"
console.log(typeof 3.14);        // "number" — nincs külön tizedes típus
console.log(typeof "Egér");      // "string"
console.log(typeof true);        // "boolean"
console.log(typeof undefined);   // "undefined"
console.log(typeof null);        // "object"  ← !!!
⚠️ typeof null → "object"

Ez a JavaScript egyik legrégebbi, ismert hibája — az első verzióból maradt, és a kompatibilitás miatt sosem javították. A null nem objektum, csak a typeof mondja ezt. Ha azt akarod tudni, hogy valami null-e, hasonlítsd össze közvetlenül: ertek === null (a === a következő fejezet témája).

Dinamikus típusosság

A JavaScript dinamikusan típusos: nem kell előre megadni a típust, a változó azt veszi fel, amit beleteszünk — és menet közben akár meg is változhat. Ez kényelmes, de zavaró is lehet, ezért egy változóban tartsunk egyféle típust:

let adat = 42;             // typeof adat → "number"
adat = "negyvenkettő";     // typeof adat → "string" — megengedett, de kerüljük

Logikai értékek

A boolean típusnak két értéke van: true és false. Leggyakrabban egy összehasonlítás eredményeként keletkezik — az összehasonlító operátorokat a 3. fejezet részletezi, de a >-t már most használjuk:

const keszlet = 40;
const raktaron = keszlet > 0;     // az összehasonlítás eredménye: true
console.log("Raktáron:", raktaron);   // Raktáron: true
console.log(typeof raktaron);          // "boolean"

5Szövegek és template literál

Szöveget három módon írhatunk: "dupla idézőjel", 'aposztróf', vagy backtick (` `). Az első kettő egyenértékű; szövegeket a + jellel fűzünk össze:

const nev = "Egér";
const ar = 6990;
console.log("A(z) " + nev + " ára " + ar + " Ft.");   // A(z) Egér ára 6990 Ft.

A template literál (backtick) sokkal kényelmesebb: a ${...} belsejébe közvetlenül beírhatsz változót vagy bármilyen kifejezést, és a szöveg több sorba is törhet:

console.log(`A(z) ${nev} ára ${ar} Ft.`);
console.log(`Bruttó: ${ar * 1.27} Ft`);        // kifejezés is mehet → Bruttó: 8877.3 Ft
console.log(`Bruttó: ${Math.round(ar * 1.27)} Ft`);   // kerekítve → Bruttó: 8877 Ft

A Math.round() a legközelebbi egészre kerekít (8877.3 → 8877, 2.5 → 3). Árakkal dolgozva szinte mindig kell — a többi Math-függvényt a 3. fejezet gyűjti össze.

✅ HASZNÁLD A TEMPLATE LITERÁLT

Amint egy szövegben változó szerepel, backtick + ${...} — olvashatóbb, mint a sok +, és nem felejted el a szóközöket. (A backtick magyar billentyűzeten AltGr+7.) A sima idézőjel akkor jó, ha a szöveg fix.

6A számok különlegességei

JavaScriptben egyetlen számtípus van: a number, amely 64 bites lebegőpontos számként tárol egészet és tizedes törtet is. Ebből néhány érdekesség következik, amelyeket érdemes fejből tudni.

0.1 + 0.2 — a tizedes törtek pontatlanok

console.log(0.1 + 0.2);               // 0.30000000000000004  (!)
console.log(6990 * 1.27);             // 8877.3 — itt szerencsénk volt
console.log((0.1 + 0.2).toFixed(2));  // "0.30" — két tizedesre kerekített SZÖVEG

A számítógép kettes számrendszerben tárol, és a 0.1 abban nem véges — ahogy az 1/3 tízesben sem. Ezért pénzügyi számításnál kerekítünk: Math.round() egészre, vagy szam.toFixed(2) adott tizedesre. Fontos: a toFixed szöveget ad vissza (mindig pontosan annyi tizedessel), a Math.round számot.

Math.floor és a maradék

A Math.floor() mindig lefelé kerekít (7.9 → 7). A % (maradékos osztás) az osztás maradékát adja (125 % 60 → 5). Kettőjükkel „bontunk" mennyiségeket: másodpercből perc és másodperc, forintból ezresek és a többi:

const mp = 125;
const perc = Math.floor(mp / 60);   // 125 / 60 = 2.083… → 2
const marad = mp % 60;              // 125 - 2·60 = 5
console.log(`${perc} perc ${marad} mp`);   // 2 perc 5 mp

NaN, Infinity, Number.isInteger

console.log(Number("alma"));      // NaN — "Not a Number": sikertelen számmá alakítás
console.log(typeof NaN);          // "number" — a NaN is a number típus tagja (!)
console.log(NaN + 1);             // NaN — bármi, amiben NaN van, NaN marad
console.log(1 / 0);               // Infinity — nincs hiba, „végtelen"
console.log(Number.isInteger(5));     // true
console.log(Number.isInteger(5.5));   // false
console.log(Number.isNaN(NaN));       // true — így ellenőrizd, hogy valami NaN-e
⚠️ A NaN SENKIVEL NEM EGYENLŐ

Még önmagával sem: NaN === NaN hamis. Ezért nem lehet === NaN-nal ellenőrizni — arra van a Number.isNaN(). A NaN legtöbbször onnan jön, hogy egy szöveget nem sikerült számmá alakítani — a következő szakasz erről szól.

7Típuskonverzió

Gyakran más típusban kapunk egy értéket, mint ahogyan használni akarjuk — legtöbbször szövegként érkezik egy szám. Ilyenkor explicit (kimondott) konverziót végzünk:

FüggvényMit csinálPéldák
Number(x)Bármit számmá; ha nem értelmezhető, NaNNumber("25") → 25, Number("3.5") → 3.5, Number("") → 0, Number("12 db") → NaN, Number(true) → 1
parseInt(x)A szöveg elejéről egész számot olvas, a többit eldobjaparseInt("25 db") → 25, parseInt("3.9") → 3, parseInt("db 25") → NaN
parseFloat(x)Ugyanaz, de tizedes törtet is olvasparseFloat("3.5 kg") → 3.5
String(x)Bármit szöveggéString(42) → "42", String(true) → "true", String(null) → "null"
Boolean(x)Bármit logikai értékkéBoolean(0) → false, Boolean("") → false, Boolean("0") → true, Boolean(42) → true

A Boolean() szabálya egyszerű: 0, "" (üres szöveg), null, undefined, NaN és false hamis — minden más igaz. Ezt „truthy/falsy"-nak hívják, a 3. fejezetben lesz fontos.

Implicit konverzió — amikor a gép dönt helyetted

Ha két különböző típust operátorral kötsz össze, a JavaScript magától átalakít valamit — és nem mindig azt, amire számítasz. A + a legveszélyesebb: ha bármelyik oldal szöveg, összefűz. A többi aritmetikai operátor (-, *, /) viszont számmá alakít:

console.log("5" + 2);      // "52"  — összefűzés!
console.log("5" * 2);      // 10    — a * számmá alakítja a "5"-öt
console.log("5" - 2);      // 3
console.log("5" + 2 * 2);  // "54"  — előbb 2*2=4, aztán "5"+4 összefűzés
console.log(Number("5") + 2);   // 7 — így egyértelmű
⛔ NE BÍZZ AZ IMPLICIT KONVERZIÓBAN

Ha egy érték szövegként jön (fájlból, hálózatról, felhasználótól), azonnal alakítsd át Number()-rel, és csak utána számolj vele. Így a kód olvasója is látja, hogy itt szám lesz — és a "52"-féle hibák meg sem születnek.

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

Egy HTTP-kérésben minden adat szövegként érkezik. Ha a böngésző a /termekek?oldal=3&meret=25 címet kéri, az Express-ben req.query.oldal értéke a "3" szöveg, nem a 3-as szám. Ha azzal számolsz, hogy oldal + 1, "31"-et kapsz. Ezért a szerveroldali kód első sorai szinte mindig ilyenek: const oldal = Number(req.query.oldal); — és utána jön az ellenőrzés, hogy nem lett-e NaN.

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

Kísérletezz a változókkal és a típusokkal! Próbáld ki a const újraértékadását (hibát kapsz), a 0.1 + 0.2-t, és a "5" + 2 vs "5" * 2 különbséget. A kimenet úgy jelenik meg, ahogy Node-ban a terminálban látnád.

JavaScript-gyakorló

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

A kimenet itt jelenik meg…

9Feladatok

Webshop-ízű számolós feladatok: bruttó ár, kör, átváltások, típusok. Az adott változókat a gyakorló hozza létre (let-tel, tehát módosíthatod is őket) — te hozz létre továbbiakat const-tal, számolj, és írd ki pontosan a kért formában. Figyelj a kerekítésre: a toFixed szöveget ad (5.0), a Math.round számot (5).

Gyakorló feladatok

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

Kész: 0 / 0
✅ RÉSZEREDMÉNY → VÁLTOZÓ

Ne írj hosszú kifejezést egyenesen a console.log-ba. Számold ki a részeredményt egy jól elnevezett const-ba (const brutto = Math.round(netto * 1.27);), és azt írd ki — így könnyebb ellenőrizni, és a hibát is gyorsabban megtalálod.

10Összegzés

  1. A változó névvel ellátott tároló: const (nem adható újra — alapértelmezett), let (módosítható), var (régi, kerüljük). A const objektum belseje módosítható marad.
  2. Elnevezés: betű/szám/_/$, nem kezdődhet számmal, nincs szóköz, kis/nagybetű számít; stílus: camelCase, beszélő nevek.
  3. Alaptípusok: number, string, boolean, undefined, null. A typeof megmondja a típust — kivéve typeof null, ami tévesen "object".
  4. Template literál: `${valtozo} Ft` — kifejezés is állhat a ${}-ban. Változós szöveghez ezt használd.
  5. Egy számtípus van; a tizedes törtek pontatlanok (0.1 + 0.2). Kerekítés: Math.round (szám), toFixed(2) (szöveg), Math.floor (lefelé) + % (maradék). NaN, Infinity, Number.isInteger, Number.isNaN.
  6. Explicit konverzió: Number(), parseInt(), parseFloat(), String(), Boolean().
  7. Implicit konverzió: "5" + 2 → "52" (összefűzés), de "5" * 2 → 10. Szövegként érkező számot azonnal alakíts Number()-rel — Node-ban a query-paraméterek mindig szövegek.
➡️ KÖVETKEZŐ LÉPÉS

Tudsz értéket tárolni és átalakítani — a következő fejezetben az operátorok és kifejezések jönnek: aritmetika, összehasonlítás, a hírhedt == vs ===, logikai műveletek rövidzárral, a feltételes ? : operátor és a Math objektum függvényei egy táblázatban.