Junior
Šta se dešava u JavaScript-u pri nestrogo poređenje (==)?
sobes.tech АИ
Одговор од АИ
U nesuglasnosti (==) u JavaScript-u, pre poređenja se vrši konverzija tipova (coercion) operanada. Ako se tipovi operanada razlikuju, JavaScript pokušava da konvertuje jedan ili oba operanda u isti tip, na osnovu niza pravila.
Glavna pravila konverzije sa ==:
- Broj i niz: Niz se konvertuje u broj. Ako konverzija ne uspe (NaN), rezultat je uvek
false.// "10" se konvertuje u 10. Rezultat: true console.log(10 == "10"); // "abc" se konvertuje u NaN. Rezultat: false console.log(10 == "abc"); - Boolean i ne-Boolean: Boolean se konvertuje u broj (
trueu 1,falseu 0). Zatim se porede broj i drugi operand.// true se konvertuje u 1. Rezultat: true console.log(true == 1); // false se konvertuje u 0. Rezultat: true console.log(false == 0); // false se konvertuje u 0, "0" se konvertuje u 0. Rezultat: true console.log(false == "0"); - Null i Undefined:
nullje jednakundefinedkaotrue, i sa ničim drugim (osim sebe) kaotrue.// Rezultat: true console.log(null == undefined); // Rezultat: false console.log(null == 0); // Rezultat: false console.log(undefined == 0); - Objekat i primitiv: Objekat se konvertuje u primitiv (pomoću
valueOfilitoString), a zatim se porede primitivne vrednosti.// Objekat se konvertuje u niz "10" (kroz toString()), a zatim se poredi sa brojem 10 // "10" se konvertuje u 10. Rezultat: true console.log({ toString: () => "10" } == 10); - Simbol i drugi: Simboli se mogu porediti samo sa drugim simbolima ili primitivnim vrednostima na koje simbol može biti konvertovan (što je u standardnim slučajevima nemoguće).
// Rezultat: false console.log(Symbol('a') == 'a');
Ne-škrto poređenje može dovesti do neočekivanih rezultata zbog automatske konverzije tipova. Za predvidljivije ponašanje preporučuje se korišćenje stroge poređenja (===), koje ne vrši konverziju tipova i direktno poredi operande.