webroad.online
  1. 1Web
  2. 2HTML
  3. 3CSS
  4. 4JavaScript
  5. 5TypeScript
  6. 6Git
  7. 7Unelte
  8. 8React
  9. 9State management
  10. 10Next.js
  11. 11Formulare
  12. 12Date și backend
  13. 13SEO
  14. 14Tailwind CSS
  15. 15Animații
  16. 16Testare
  17. 17Arhitectură
JavaScript · Lecția 1 din 17

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 valoare

Fă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 bloc

const 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; const implicit, let când se schimbă, var niciodată.
  • 7 tipuri primitive (copiate prin valoare) + obiecte (copiate prin referință).
  • Mereu ===; ?? pentru valori implicite; ?. pentru acces sigur.

Surse oficiale

Exerciții

Ți-a fost utilă pagina?

Un click — fără cont.