Pazite na prisilo vnosa: ta napredna funkcija je lahko vzrok za subtilne napake, zato se prepričajte, da poznate, kako deluje.

Dinamično tipkanje JavaScripta pomeni, da je lahko vaša koda nekoliko enostavnejša, vendar je še vedno mogoče narediti napake. Da bi se jim izognili, je koristno vedeti, kako JavaScript razreši vrednosti z različnimi vrstami, da jih primerjate.

Razumevanje pretvorbe tipov in prisile v JavaScriptu je ključnega pomena za pisanje zanesljivih in učinkovitih programov. Vsak koncept ima posebne primere uporabe in najboljše prakse, ki lahko vplivajo na vedenje vaše kode.

Zakaj pride do pretvorbe tipov in prisile v JavaScriptu?

Jezik JavaScript je dinamično tipiziran. To pomeni, da za razliko od statično tipiziranih jezikov JavaScript ne zahteva, da izrecno definirate podatkovni tip spremenljivke, preden jo uporabite. Namesto tega JavaScript določi vrsto med izvajanjem glede na vrednost spremenljivke.

Ker podatkovni tipi niso izrecno deklarirani do časa izvajanja, ko izvajate operacije, ki zahtevajo drugačne podatke vrste, JavaScript samodejno preveri njihovo medsebojno združljivost za operacijo, ki jo želite izvesti. Če sta med seboj združljiva, operacija poteka normalno.

instagram viewer

Vendar pa predpostavimo, da niso združljivi z operacijo – na primer poskušate dodati niz in številko. V takšnih primerih JavaScript samodejno "prisili" eno od vrst, da se prilega drugi, da zagotovi uspešnost operacije, namesto da vrže napako. Ta postopek je znan kot tipska prisila ali implicitna prisila.

Vrsta prisile

Prisiljevanje tipa je samodejna pretvorba vrednosti iz enega podatkovnega tipa v drugega, ki jo izvaja JavaScript med izvajanjem programa, da zagotovi uspešno izvedbo operacije.

Vendar ni mogoče prisiliti vseh tipov podatkov. Niz, število in logična vrednost so edini podatkovni tipi JavaScript da bo jezik izsilil v drugačno vrsto. Ko poskušate izvesti nezdružljivo operacijo s tipi podatkov, ki jih JavaScript ne more izsiliti, se prikaže napaka.

JavaScript izsiljuje vrste glede na vrsto operacije in operator, ki ga uporabljate v operaciji.

Prisila z operatorjem “+”.

V JavaScriptu je »+” ima dve različni vedenji, odvisno od vrst svojih operandov. Izvaja lahko tako številsko seštevanje kot združevanje nizov. To lahko povzroči prisilo tipa, ko eden od operandov ni pričakovanega tipa.

Če sta oba operanda števila, je "+” operater izvede seštevanje:

pustiti num1 = 42;
pustiti num2 = 10;
pustiti vsota = num1 + num2; // Dodatek
konzola.log (vsota); // 52

Če sta oba operanda niza, je "+” izvaja združevanje nizov:

pustiti str1 = "Zdravo";
pustiti str2 = "svet";
pustiti rezultat = str1 + " " + str2; // Združevanje nizov
konzola.log (rezultat); // "Pozdravljen, svet"

Če pa eden od operandov ni niz, ga bo JavaScript implicitno prisilil v niz, preden izvede veriženje:

// Število in niz
pustiti št = 42;
pustiti str = "Zdravo";

// num se prisili v niz in nato združi
pustiti rezultat_1 = št + str;
konzola.log (rezultat_1); // "42Pozdravljeni"

// Niz in logična vrednost
pustiti bool = prav;

// bool se prisili v niz in nato združi
pustiti rezultat_2 = bool + str;
konzola.log (rezultat_2); // "trueHello"

Prisila z operaterjem »-«.

V JavaScriptu je »-” se uporablja predvsem za operacije odštevanja. Ko en ali oba operanda v operaciji, ki vključuje "-” ni številka, JavaScript jo bo poskušal pretvoriti v številko.

Ko sta oba operanda števila, JavaScript izvede odštevanje. Izvaja tudi odštevanje, ko sta eden ali oba operanda niza, ki predstavljata število:

konst num1 = 10;
konst num2 = 20;
konst rezultat_1 = št2 - št1; // Odštevanje
konzola.log (rezultat_1); // 10

konst strNum = "10";
konst strNum2 = "20";
konst rezultat = strNum2 - strNum; // Vnesite prisilo k številom, nato odštevanje
konzola.log (rezultat_1); // 10

Če nobeden od operandov ni število ali niz, ki predstavlja število, bo JavaScript poskusil podatkovni tip prisiliti v njegov številski ekvivalent. Če podatkovni tip nima numeričnega ekvivalenta, se bo operacija vrnila NaN (Ni številka):

// true se prisili na 1, false se prisili na 0
konst boolNum = prav;
konst boolNum2 = lažno;
konst rezultat_1 = boolNum - boolNum2;
konzola.log (rezultat_1); // 1

// prazne matrike se prisilijo na 0
konst arrNum = [];
konst arrNum2 = [];
konst rezultat_2 = arrNum - arrNum2;
konzola.log (rezultat_2); // 0

// prazni objekti se prisilijo v NaN
konst objNum = {};
konst rezultat_3 = arrNum - objNum;
konzola.log (rezultat_3); // 0 - NaN = NaN

V tem primeru JavaScript izsiljuje logične vrednosti prav in lažno njihovim številčnim ekvivalentnim vrednostim, 1 in 0, oz. Prazne matrike so prisiljene k 0, in prazni predmeti so prisiljeni NaN.

Prisila z operatorji enakosti (==)/().

V JavaScriptu so operatorji enakosti (== in ) primerjajte vrednosti za enakost. Vendar se zaradi prisile tipa obnašajo drugače.

"==” (ohlapna enakost) izvaja prisilitev tipa, kar pomeni, da poskuša operande pretvoriti v isti tip pred primerjavo:

"10" == 10; // prav

V tem primeru JavaScript prisili niz »10« v število 10, tako da je izraz ovrednoten prav.

Vendar pa je "” (stroga enakost) operator ne izvaja prisile tipa. Zahteva, da sta vrednost in tip enaka, da se vrne primerjava prav:

"10"10; // napačno

V tem primeru se primerjava vrne lažno ker so operandi različnih tipov (niz in število).

Na splošno bi morali uporabljati (stroga enakost) v JavaScriptu, da se izognete nepričakovanemu prisilnemu vedenju vrste.

Prisila tipa ali implicitna pretvorba lahko povzroči nepričakovano vedenje zaradi svoje samodejne narave. V primerih, ko morate pretvoriti tipe, je priporočljivo, da tipe izrecno pretvorite. Postopek eksplicitne pretvorbe tipov je znan kot pretvorba tipov. Imenuje se tudi kot pretvorba tipa in eksplicitna pretvorba tipa.

Pretvorba vrste

Pretvorba tipa, znana tudi kot pretvorba tipa, je eksplicitni postopek pretvorbe vrednosti iz enega podatkovnega tipa v drugega v JavaScriptu z uporabo vgrajenih funkcij, kot je Število (), Vrvica(), Boolean(), parseInt(), in parseFloat().

Pretvorbo tipa lahko izvedete tako, da kot argument posredujete vrednost, ki jo želite pretvoriti, v vgrajene funkcije pretvorbe. Te funkcije nato pretvorijo vašo vrednost v želeno vrsto.

Tukaj je primer uporabe Število () funkcija:

konst numStr = "123";
konst št = številka(numStr); // Pretvori niz v število
konzola.log (št); // 123

Posredovanje niza, ki je veljavno število, kot argument za Število () funkcija bo vrnila številko. Posredovanje niza, ki je neveljavna številka, bo vrnilo vrednost NaN.

Tukaj je primer uporabe Vrvica() funkcija:

konst bool = prav;
konst str2 = Vrvica(bool); // Pretvori logično vrednost v niz
konzola.log (str2); // "prav"

Posredovanje katerega koli podatkovnega tipa v razen simbola v Vrvica() bo pretvorila podatkovni tip v niz.

Tukaj je primer uporabe Boolean() funkcija:

// Pretvori niz v logično vrednost (resnično: resnično, lažno: napačno)
konst str = "zdravo";
konst bool2 = Boolean(str);
konzola.log (bool2); // prav

Prenos resničnih vrednot na Boolean() funkcija vrne logično vrednost »true«, medtem ko posredovanje lažnih vrednosti vrne logično vrednost »false«.

Tukaj je primer uporabe ParseInt() in ParseFloat() funkcija:

// Pretvori niz v celo število
konst numStr = "123.00";
konst num1 = parseInt(numStr);
konzola.log (št.1); // 123

// Pretvori niz v število s plavajočo vejico
konst floatStr = "3.14";
konst num2 = parseFloat(floatStr);
konzola.log (št.2); // 3.14

The parseInt() funkcija razčleni argument niza in vrne celo število. The parseFloat() funkcija pretvori niz v število s plavajočo vejico.

Izkoriščanje prisile tipa in pretvorbe

Z razumevanjem prisile tipa in pretvorbe se lahko premišljeno odločite, kdaj in kako ju učinkovito uporabiti v svoji kodi. Pomembno je najti pravo ravnovesje, premišljeno uporabo prisile tipa za jedrnato in priročno kodo in zanašanje na eksplicitno pretvorbo tipa za namerne in predvidljive pretvorbe tipa.