Junior
Ce se întâmplă în JavaScript la o comparație nestrictă (==)?
sobes.tech AI
Răspuns de la AI
În comparația nestrictă (==) în JavaScript, are loc o conversie de tipuri (coercion) a operandilor înainte de comparație. Dacă tipurile operandilor diferă, JavaScript încearcă să convertească unul sau ambii operanzi la același tip, bazându-se pe o serie de reguli.
Reguli principale de conversie cu ==:
- Număr și șir de caractere: Șirul de caractere este convertit în număr. Dacă conversia nu reușește (NaN), rezultatul este întotdeauna
false.// "10" devine 10. Rezultat: true console.log(10 == "10"); // "abc" devine NaN. Rezultat: false console.log(10 == "abc"); - Boolean și non-Boolean: Booleanul este convertit în număr (
trueîn 1,falseîn 0). Apoi, se compară numărul și celălalt operand (care poate fi convertit).// true devine 1. Rezultat: true console.log(true == 1); // false devine 0. Rezultat: true console.log(false == 0); // false devine 0, "0" devine 0. Rezultat: true console.log(false == "0"); - Null și Undefined:
nulleste egal cuundefinedcatrue, și cu nimic altceva (cu excepția lui însuși) catrue.// Rezultat: true console.log(null == undefined); // Rezultat: false console.log(null == 0); // Rezultat: false console.log(undefined == 0); - Obiect și primitiv: Obiectul este convertit în primitiv (folosind
valueOfsautoString), apoi se compară primitivele.// Obiectul se convertește în șirul "10" (prin toString()), apoi se compară cu numărul 10 // "10" devine 10. Rezultat: true console.log({ toString: () => "10" } == 10); - Simbol și altceva: Simbolurile pot fi comparate doar cu alt simbol sau cu o valoare primitivă la care simbolul poate fi convertit (ceea ce în cazuri standard este imposibil).
// Rezultat: false console.log(Symbol('a') == 'a');
Compararea nestrictă poate duce la rezultate neașteptate din cauza conversiei automate a tipurilor. Pentru un comportament mai previzibil, se recomandă utilizarea comparației stricte (===), care nu efectuează conversie de tipuri și compară operandii direct.