1. blokk · Alapok · 2. fejezet
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.
var-t.typeof-fal megnézed bármi típusát.Math.round/Math.floor/toFixed-del.Number, String, parseInt…), és felismered az implicit konverzió csapdáit.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 |
|---|---|
const | Ha az érték nem fog változni — ez az alapértelmezett választás. |
let | Ha az értéket később módosítani kell (számláló, összeg, állapot). |
var | Ré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. |
A let-tel létrehozott változó értéke később újra megadható, a const-é
nem — 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.
Í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.
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.
_ és $ jelből — de nem kezdődhet számmal.let, if, function…).ar és az Ar két külön változó.teljesAr, vasarloNeve, rendelesDatum.keszlet, ar).| Helyes | Helytelen |
|---|---|
ar, teljesAr, termek_nev, $elem | 2ar (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ó) |
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.
Minden értéknek van típusa. Az alaptípusok (primitívek), amelyekkel most dolgozunk:
| Típus | Mit tárol | Példa |
|---|---|---|
number | Szám — egész és tizedes tört ugyanaz a típus | 42, 3.14, -7, 6990 |
string | Szöveg, idézőjelben | "Egér", 'kábel', `sablon`, "" (üres) |
boolean | Logikai: igaz / hamis | true, 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ék | let kupon = null; |
Később jönnek az összetett típusok: tömb (6. fejezet), objektum (7. fejezet), függvény (5. fejezet).
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" ← !!!
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).
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
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"
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.
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.
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.
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.
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
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
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.
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ény | Mit csinál | Példák |
|---|---|---|
Number(x) | Bármit számmá; ha nem értelmezhető, NaN | Number("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 eldobja | parseInt("25 db") → 25, parseInt("3.9") → 3, parseInt("db 25") → NaN |
parseFloat(x) | Ugyanaz, de tizedes törtet is olvas | parseFloat("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.
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ű
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.
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.
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.
Válassz mintát vagy írj sajátot — majd Futtatás (Ctrl+Enter) ↓
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).
⭐ alap · ⭐⭐ haladó · ⭐⭐⭐ kihívás — a haladásod ebben a böngészőben megmarad.
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.
const (nem adható újra — alapértelmezett), let (módosítható), var (régi, kerüljük). A const objektum belseje módosítható marad._/$, nem kezdődhet számmal, nincs szóköz, kis/nagybetű számít; stílus: camelCase, beszélő nevek.number, string, boolean, undefined, null. A typeof megmondja a típust — kivéve typeof null, ami tévesen "object".`${valtozo} Ft` — kifejezés is állhat a ${}-ban. Változós szöveghez ezt használd.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.Number(), parseInt(), parseFloat(), String(), Boolean()."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.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.