Capitol gratuit

Variabile, tipuri de date și operatori

JavaScript oferă trei moduri de a declara variabile. Înțelegerea diferențelor este esențială: Cuvânt cheieScopeReasignareHoistingUtilizare constBlockNuTDZV...

Declararea variabilelor

JavaScript oferă trei moduri de a declara variabile. Înțelegerea diferențelor este esențială:

Cuvânt cheieScopeReasignareHoistingUtilizare
constBlockNuTDZValori care nu se schimbă (implicit)
letBlockDaTDZValori care se schimbă
varFunctionDaDa (undefined)Evitați - moștenit din versiuni vechi
const PI = 3.14159;          // Nu poate fi reasignat
const NUME_SITE = "GOAI";   // Convenție: UPPERCASE pentru constante globale

let varsta = 30;             // Poate fi reasignat
varsta = 31;                 // OK

var vechi = "evitați";       // Nu folosiți var în cod modern
Atenție: Folosiți const implicit pentru toate variabilele. Treceți la let doar când aveți nevoie să reasignați valoarea. Nu folosiți var niciodată în cod modern.

Tipuri de date primitive

JavaScript are 7 tipuri de date primitive (imutabile):

TipExempluDescriere
string"Salut", 'Salut', `Salut`Text
number42, 3.14, -7Numere (întregi și decimale)
bigint9007199254740991nNumere întregi foarte mari
booleantrue, falseValori logice
undefinedundefinedVariabilă declarată dar neinițializată
nullnullAbsența intenționată a unei valori
symbolSymbol("id")Identificator unic (folosit rar)
const nume = "GOAI";                // string
const anul = 2026;                  // number
const pretDecimal = 99.99;          // number (nu există tip separat pentru float)
const esteActiv = true;             // boolean
const numarMare = 123456789n;       // bigint
let nedefinit;                      // undefined (automat)
const gol = null;                   // null (setat intenționat)

// Verificarea tipului
console.log(typeof nume);           // "string"
console.log(typeof anul);           // "number"
console.log(typeof esteActiv);      // "boolean"
console.log(typeof gol);            // "object" (bug istoric în JS!)

Stringuri și template literals

Template literals (backticks) sunt modul modern de a lucra cu stringuri:

const prenume = "Dorel";
const firma = "GOAI";

// Concatenare clasică (evitați)
const mesaj1 = "Salut, " + prenume + " de la " + firma + "!";

// Template literal (recomandat)
const mesaj2 = `Salut, ${prenume} de la ${firma}!`;

// Multi-line
const html = `
<div class="card">
<h2>${firma}</h2>
<p>Fondator: ${prenume}</p>
</div>
`;

// Expresii în template literals
const pret = 100;
const tva = 19;
console.log(`Preț cu TVA: ${pret * (1 + tva / 100)} RON`);  // "Preț cu TVA: 119 RON"

Metode utile pentru stringuri

const text = "  JavaScript este genial!  ";

text.trim()                  // "JavaScript este genial!"
text.toUpperCase()           // "  JAVASCRIPT ESTE GENIAL!  "
text.toLowerCase()           // "  javascript este genial!  "
text.includes("genial")      // true
text.startsWith("  Java")    // true
text.indexOf("este")         // 14
text.slice(2, 12)            // "JavaScript"
text.replace("genial", "puternic")  // "  JavaScript este puternic!  "
text.split(" ")              // ["", "", "JavaScript", "este", "genial!", "", ""]
"GOAI".repeat(3)             // "GOAIGOAIGOAI"
"5".padStart(3, "0")         // "005"

Numere și Math

// Conversii
Number("42")         // 42
parseInt("42px")     // 42 (ignoră textul de la final)
parseFloat("3.14")   // 3.14
+"42"                // 42 (conversie rapidă cu operatorul unar +)

// Verificări
Number.isInteger(42)     // true
Number.isFinite(1/0)     // false
Number.isNaN(NaN)        // true

// Obiectul Math
Math.round(4.7)      // 5
Math.ceil(4.1)        // 5
Math.floor(4.9)       // 4
Math.trunc(4.9)       // 4 (elimină zecimalele)
Math.abs(-5)          // 5
Math.max(1, 5, 3)     // 5
Math.min(1, 5, 3)     // 1
Math.pow(2, 8)        // 256
Math.sqrt(144)        // 12
Math.random()         // 0.0 - 0.999...

// Număr aleatoriu între min și max
function randomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
console.log(randomInt(1, 100));  // ex: 47

Operatori

Operatori de comparație

// Egalitate strictă (recomandat) - verifică și tipul
5 === 5        // true
5 === "5"      // false
null === undefined  // false

// Egalitate liberă (evitați) - face conversie de tip
5 == "5"       // true (surpriză!)
null == undefined   // true
0 == false     // true

// Inegalitate
5 !== "5"      // true (strict)
5 != "5"       // false (liber)
Regulă de aur: Folosiți întotdeauna === și !== (egalitate strictă). Operatorii == și != fac conversii implicite care produc rezultate neașteptate.

Operatori logici

// AND, OR, NOT
true && false    // false
true || false    // true
!true            // false

// Short-circuit evaluation
const user = null;
const nume = user && user.name;     // null (nu aruncă eroare)
const implicit = null || "GOAI";    // "GOAI"

// Nullish coalescing (??) - doar null/undefined
const valoare = 0 ?? "implicit";    // 0 (0 nu e null/undefined)
const valoare2 = 0 || "implicit";   // "implicit" (0 e falsy)

// Optional chaining (?.)
const obj = { a: { b: { c: 42 } } };
console.log(obj?.a?.b?.c);       // 42
console.log(obj?.x?.y?.z);       // undefined (fără eroare)

Conversii de tip (coercion)

// Valori "falsy" (evaluate ca false)
Boolean(false)       // false
Boolean(0)           // false
Boolean(-0)          // false
Boolean("")          // false
Boolean(null)        // false
Boolean(undefined)   // false
Boolean(NaN)         // false

// Tot restul este "truthy"
Boolean("0")         // true (string ne-vid!)
Boolean([])          // true (array gol!)
Boolean({})          // true (obiect gol!)
Sfat: Memorați cele 7 valori falsy. Toate celelalte valori, inclusiv "0", [] și {}, sunt truthy.

Continuați cu restul cursului

Acesta este capitolul 2 din cele 14 ale cursului, cu 7 lecții din 73. Cumpărați cursul și parcurgeți tot conținutul în cont, cu progres salvat, test final și certificat.

Cumpărați cursul la 110 €