Operatori condiționali ?: și ??
Operatorii condiționali vă permit să testați o condiție și, în funcție de rezultatul testului, să efectuați anumite acțiuni. Aici ne vom uita la operatorul ?: sau așa-numitul operator ternar și la operația ??.
Funcționare ternară
Operația ternară constă din trei operanzi și are următoarea definiție:
[primul operand - condiție] ? [al doilea operand] : [al treilea operand]
În funcție de condiția din primul operand, operația ternară returnează al doilea sau al treilea operand. Dacă condiția din primul operand este adevărată (true), atunci se returnează al doilea operand; dacă condiția este falsă (false), atunci se returnează al treilea operand. De exemplu:
const a = 1;
const b = 2;
const result = a < b ? a: b;
console.log(result); // 1
În acest caz, primul operand reprezintă condiția a < b. Dacă valoarea constantei a este mai mică decât valoarea constantei b, atunci se returnează al doilea operand - a, deci constanta result va fi egală cu a.
Dacă valoarea constantei a este mai mare sau egală cu valoarea constantei b, atunci se returnează al treilea operand - b, astfel încât constanta result va fi egală cu valoarea lui b.
Ca și operații, pot fi folosite și expresii:
const a = 1;
const b = 2;
const result = a < b ? a + b : a - b;
console.log(result); // 3
În acest exemplu de cod, primul operand reprezintă aceeași condiție ca în exemplul anterior, însă al doilea și al treilea operand reprezintă operații aritmetice. Dacă valoarea constantei a este mai mică decât valoarea constantei b, atunci se returnează al doilea operand - a + b. Prin urmare, constanta result va fi egală cu suma lui a și b.
Dacă valoarea constantei a este mai mare sau egală cu valoarea constantei b, atunci se returnează al treilea operand - a - b. Astfel, constanta result va fi egală cu diferența dintre a și b.
Operatorul ??
Operatorul ?? (nullish coalescing operator) permite verificarea valorii pentru null și undefined. Acesta primește doi operanzi:
operandul_stâng ?? operandul_drept
Operatorul returnează valoarea operandului din stânga dacă aceasta NU este egală cu null și undefined. În caz contrar, se returnează valoarea operandului din dreapta. De exemplu:
const result = "hello" ?? "world";
console.log(result); // hello
console.log(0 ?? 5); // 0
console.log("" ?? "javascript"); // "" -String gol
console.log(false ?? true); // false
console.log(null ?? "not null"); // not null
console.log(undefined ?? "defined"); // defined
console.log(null ?? null); // null
console.log(undefined ?? undefined); // undefined
Operator ??=
Operatorul ?? are o modificare sub forma operatorului ??=, care vă permite și să verificați valoarea pentru null și nedefinit. Acceptă doi operanzi:
operandul_stâng ??= operandul_drept
Dacă operandul stâng este egal cu null și undefined, atunci i se atribuie valoarea operandului din dreapta. În caz contrar, operandul stâng își menține valoarea. De exemplu:
const message = "Hello JavaScript";
let text = "Hello work!"
text ??= message;
console.log(text); // Hello work!
Aici variabila text nu este egală cu null sau undefined, așa că își păstrează valoarea. Un exemplu invers:
const message = "Hello JavaScript";
let text = null;
text ??= message;
console.log(text); // Hello JavaScript
Aici variabila text este egală cu null, așa că, folosind operatorul ??=, primește valoarea variabilei message.