Junior
Kas notiek JavaScript, veicot neitrālu salīdzinājumu (==)?
sobes.tech AI
Atbilde no AI
JavaScript negrieztā salīdzināšana (==) veic tipu pārvēršanu (coercion) operandiem pirms salīdzināšanas. Ja operandu tipi atšķiras, JavaScript mēģina vienu vai abus pārvērst vienā tipā, balstoties uz vairākām noteikumiem.
Galvenie noteikumi, kas attiecas uz ==:
- Skaitlis un virkne: Virkne tiek pārvērsta skaitlī. Ja pārvēršana neizdodas (NaN), rezultāts vienmēr ir
false.// "10" tiek pārvērsts par 10. Rezultāts: true console.log(10 == "10"); // "abc" tiek pārvērsts par NaN. Rezultāts: false console.log(10 == "abc"); - Boolean un ne-Boolean: Boolean tiek pārvērsts par skaitli (
trueuz 1,falseuz 0). Tad tiek salīdzināts skaitlis un cits operands.// true tiek pārvērsts uz 1. Rezultāts: true console.log(true == 1); // false tiek pārvērsts uz 0. Rezultāts: true console.log(false == 0); // false tiek pārvērsts uz 0, "0" tiek pārvērsts uz 0. Rezultāts: true console.log(false == "0"); - Null un Undefined:
nulltiek salīdzināts arundefinedkātrue, un ar neko citu (izņemot sevi) kātrue.// Rezultāts: true console.log(null == undefined); // Rezultāts: false console.log(null == 0); // Rezultāts: false console.log(undefined == 0); - Objekts un primitives: Objekts tiek pārvērsts par primitivu (izmantojot
valueOfvaitoStringmetodes), tad tiek salīdzināti primitivie.// Objekts tiek pārvērsts par virkni "10" (caur toString()), tad tiek salīdzināts ar skaitli 10 // "10" tiek pārvērsts uz 10. Rezultāts: true console.log({ toString: () => "10" } == 10); - Simbols un cits: Simbolu var salīdzināt tikai ar citu simbolu vai primitivu, kam simbols var tikt pārvērsts (kas būtībā ir neiespējami standarta gadījumos).
// Rezultāts: false console.log(Symbol('a') == 'a');
Negrieztā salīdzināšana var novest pie negaidītiem rezultātiem, jo notiek tipu automātiska pārvēršana. Lai būtu paredzamāks uzvedība, ieteicams izmantot stingro salīdzinājumu (===), kas neveic tipu pārvēršanu un tieši salīdzina operandus.