Variabile și tipuri
const/let, tipuri primitive, === și operatori utili.
Actualizat
Ce este o variabilă
O variabilă e un nume pe care îl legi de o valoare, ca să o poți folosi mai târziu. Gândește-te la o etichetă lipită pe o cutie:
const price = 100 // eticheta „price” → valoarea 100
const total = price * 2 // folosești eticheta în loc de valoareFără variabile ar trebui să repeți valorile peste tot și n-ai putea lucra cu date care se schimbă (input de la user, răspunsuri de la server).
O variabilă are trei lucruri: nume, valoare și scope (zona din cod unde e vizibilă).
Cele 3 moduri de a declara
const |
let |
var |
|
|---|---|---|---|
| Poate fi reasignată | nu | da | da |
| Scope | bloc { } |
bloc { } |
funcție întreagă |
| Hoisting | da, dar în TDZ | da, dar în TDZ | da, cu valoarea undefined |
| Redeclarare în același scope | eroare | eroare | permisă (periculos) |
| Când o folosești | implicit, aproape mereu | când valoarea chiar se schimbă (contor, acumulator) | niciodată în cod nou |
const name = 'Ana'
name = 'Ion' // ✗ TypeError: Assignment to constant variable
let count = 0
count = count + 1 // ✓
if (true) {
let inside = 1
var leaks = 2
}
inside // ✗ ReferenceError — let trăiește doar în bloc
leaks // 2 — var „scapă” din blocconst nu înseamnă imutabil. Fixează doar legătura nume → valoare. Dacă valoarea e un obiect sau array, conținutul se poate schimba:
const user = { name: 'Ana' }
user.name = 'Ion' // ✓ merge — modifici obiectul, nu legătura
user = {} // ✗ — încerci să schimbi legătura(Despre asta, în detaliu, în Referințe și imutabilitate.)
Ce este un tip
Fiecare valoare are un tip — ce fel de dată este și ce poți face cu ea. JS e dinamic tipizat: variabila nu are tip, doar valoarea. Aceeași variabilă let poate ține acum un număr, apoi un string.
Tipurile primitive
Primitivele sunt valori simple, imutabile, copiate prin valoare.
| Tip | Exemple | Pentru |
|---|---|---|
string |
'Ana', "text", `Salut ${name}` |
text |
number |
42, 3.14, -1, NaN, Infinity |
orice număr (un singur tip pentru întregi și zecimale) |
boolean |
true, false |
da / nu |
undefined |
undefined |
„nu are încă valoare” — pus de JS |
null |
null |
„gol intenționat” — pus de tine |
bigint |
9007199254740993n |
întregi foarte mari |
symbol |
Symbol('id') |
chei unice (rar în aplicații) |
Obiectele
Tot ce nu e primitiv e object: obiecte {}, array-uri [], funcții, Date, Map… Obiectele se copiază prin referință.
null vs undefined
undefined |
null |
|
|---|---|---|
| Cine îl pune | JS, automat | tu, explicit |
| Înseamnă | variabilă neinițializată, proprietate lipsă, funcție fără return |
„aici nu e nimic, intenționat” |
typeof |
'undefined' |
'object' (bug istoric) |
Verificarea tipului
typeof 'a' // 'string'
typeof 42 // 'number'
typeof undefined // 'undefined'
typeof null // 'object' ← capcană
typeof [] // 'object' ← capcană
typeof (() => {}) // 'function'
Array.isArray([]) // true ← așa verifici array-ul
x === null // așa verifici null== vs ===
=== (strict) |
== (loose) |
|
|---|---|---|
| Convertește tipurile | nu | da, după reguli greu de ținut minte |
0 === '' |
false |
0 == '' → true 😬 |
| Când | mereu | practic niciodată |
Truthy și falsy
În if, &&, ||, orice valoare e convertită la boolean. Valori falsy (sunt doar 6): false, 0, '', null, undefined, NaN. Tot restul e truthy — inclusiv '0', [] și {}.
Operatorii pentru valori lipsă
| Operator | Folosește valoarea din dreapta când stânga e... | Exemplu |
|---|---|---|
|| |
orice falsy (inclusiv 0, '') |
name || 'Anonim' |
?? |
doar null / undefined |
limit ?? 10 — păstrează 0 |
?. |
— accesează doar dacă există | user?.address?.city |
Regulă: pentru valori implicite folosește ??, nu || — altfel 0 și '' devin „lipsă”.
Template literals
const msg = `Salut, ${name}! Ai ${count} ${count === 1 ? 'mesaj' : 'mesaje'}.`Backtick-uri, expresii în ${}, pot avea mai multe rânduri.
Pe scurt
- Variabilă = nume legat de o valoare;
constimplicit,letcând se schimbă,varniciodată. - 7 tipuri primitive (copiate prin valoare) + obiecte (copiate prin referință).
- Mereu
===;??pentru valori implicite;?.pentru acces sigur.