Ettevaatust tüüpi sunniga: see täiustatud funktsioon võib põhjustada peeneid vigu, seega veenduge, et teate, kuidas see töötab.

JavaScripti dünaamiline tippimine tähendab, et teie kood võib olla pisut lihtsam, kuid siiski on võimalik vigu teha. Nende vältimiseks on kasulik teada, kuidas JavaScript eri tüüpi väärtusi lahendab, ja neid võrrelda.

Tüüpide teisendamise ja sundimise mõistmine JavaScriptis on usaldusväärsete ja tõhusate programmide kirjutamiseks ülioluline. Igal kontseptsioonil on konkreetsed kasutusjuhud ja parimad tavad, mis võivad teie koodi käitumist mõjutada.

Miks toimub JavaScriptis tüübi teisendamine ja sundimine?

JavaScripti keel on dünaamiliselt trükitud. See tähendab, et erinevalt staatiliselt trükitud keeltest ei nõua JavaScript teil enne selle kasutamist muutuja andmetüüpi selgesõnaliselt määratleda. Selle asemel määrab JavaScript tüübi käitusajal sõltuvalt muutuja väärtusest.

Kuna andmetüüpe ei deklareerita selgesõnaliselt enne käitusaega, kui teete toiminguid, mis nõuavad erinevaid andmeid tüüpi, kontrollib JavaScript automaatselt nende omavahelist ühilduvust toimingu puhul, mida soovite teha. Kui need on omavahel ühilduvad, kulgeb toiming tavapäraselt.

instagram viewer

Oletame aga, et need ei ühildu toiminguga – näiteks proovitakse lisada stringi ja numbrit. Sellistel juhtudel "sunnib" JavaScript automaatselt ühte tüüpidest teise sobitama, et tagada toimingu õnnestumine, mitte ei tekita vea. Seda protsessi nimetatakse tüübisunniks või kaudseks sunniks.

Tüüp sund

Tüübi sund on väärtuse automaatne teisendamine ühest andmetüübist teise, mille JavaScript teostab programmi käitamise ajal, et tagada toimingu edukas täitmine.

Kuid kõiki andmetüüpe ei saa sundida. String, arv ja tõeväärtus on ainsad JavaScripti andmetüübid et keel sunnib teist tüüpi. Kui proovite sooritada ühildumatut toimingut andmetüüpidega, mida JavaScript ei saa sundida, kuvatakse tõrketeade.

JavaScript sunnib tüüpe toimingu tüübi ja operatsioonis kasutatava operaatori alusel.

Sundimine "+" operaatoriga

JavaScriptis on "+” operaatoril on kaks erinevat käitumist olenevalt operandide tüüpidest. See võib teostada nii numbrite liitmist kui ka stringide liitmist. See võib kaasa tuua tüübi sunni, kui üks operandidest ei ole oodatud tüüpi.

Kui mõlemad operandid on arvud, siis "+” operaator lisab:

lase arv1 = 42;
lase arv2 = 10;
lase summa = arv1 + arv2; // Täiendus
konsool.log (summa); // 52

Kui mõlemad operandid on stringid, siis "+” operaator teostab stringide ühendamise:

lase str1 = "Tere";
lase str2 = "maailm";
lase tulemus = str1 + " " + str2; // Stringide ühendamine
konsool.log (tulemus); // "Tere, Maailm"

Kui aga üks operandidest ei ole string, sunnib JavaScript selle kaudselt stringiks enne konkatenatsiooni sooritamist:

// Number ja string
lase arv = 42;
lase str = "Tere";

// number sunditakse stringiks ja seejärel ühendatakse
lase tulemus_1 = arv + str;
konsool.log (tulemus_1); // "42Tere"

// String ja Boolean
lase bool = tõsi;

// bool sunnitakse stringiks ja seejärel ühendatakse
lase tulemus_2 = bool + str;
konsool.log (tulemus_2); // "trueTere"

Sundimine operaatoriga "-".

JavaScriptis on "-” operaatorit kasutatakse peamiselt lahutamistehte jaoks. Kui üks või mõlemad operandid operatsioonis, mis hõlmab "-” operaator ei ole arv, JavaScript proovib seda arvuks sundida.

Kui mõlemad operandid on arvud, teostab JavaScript lahutamise. Samuti teostab see lahutamise, kui üks või mõlemad operandid on stringid, mis esindavad arvu:

konst arv1 = 10;
konst arv2 = 20;
konst tulemus_1 = arv2 - arv1; // Lahutamine
konsool.log (tulemus_1); // 10

konst strNum = "10";
konst strNum2 = "20";
konst tulemus = strNum2 - strNum; // Sisestage arvudele sund ja seejärel lahutamine
konsool.log (tulemus_1); // 10

Kui kumbki operandist ei ole arv või arvu esindav string, proovib JavaScript sundida andmetüüpi selle numbriliseks ekvivalendiks. Kui andmetüübil pole numbrilist ekvivalenti, toiming tagastatakse NaN (mitte number):

// Tõene muudetakse 1-ks, väära 0-ks
konst boolNum = tõsi;
konst boolNum2 = vale;
konst tulemus_1 = boolNum - boolNum2;
konsool.log (tulemus_1); // 1

// tühjad massiivid muudetakse 0-ks
konst arrNum = [];
konst arrNum2 = [];
konst tulemus_2 = arrNum - arrNum2;
konsool.log (tulemus_2); // 0

// tühjad objektid sunnitakse NaN-i
konst objArv = {};
konst tulemus_3 = arrNum - objNum;
konsool.log (tulemus_3); // 0 - NaN = NaN

Selles näites sunnib JavaScript tõeväärtusi tõsi ja vale nende arvulistele ekvivalentväärtustele, 1 ja 0, vastavalt. Tühjad massiivid on sunnitud 0, ja tühjad objektid on sunnitud NaN.

Sundi võrdõiguslikkuse (==)/() operaatoritega

JavaScriptis on võrdsuse operaatorid (== ja ) võrrelge võrdsuse väärtusi. Kuid nad käituvad tüübisunni tõttu erinevalt.

"==” (lõdva võrdsuse) operaator teostab tüübisundi, mis tähendab, et ta proovib enne võrdlemist teisendada operandid samasse tüüpi:

"10" == 10; // tõsi

Selles näites sunnib JavaScript stringi "10" arvuks 10, nii et avaldis hindab tõsi.

Kuid "” (range võrdsus) operaator ei teosta tüübisundi. Võrdluse tagastamiseks on vaja, et väärtus ja tüüp oleksid samad tõsi:

"10"10; // vale

Selles näites naaseb võrdlus vale kuna operandid on erinevat tüüpi (string ja arv).

Üldiselt peaksite kasutama (range võrdsus) operaator JavaScriptis, et vältida ootamatut tüüpi sundkäitumist.

Tüübi sund või kaudne teisendamine võib selle automaatse olemuse tõttu põhjustada ootamatut käitumist. Juhtudel, kui teil on vaja tüüpe teisendada, on soovitatav tüübid selgesõnaliselt teisendada. Tüüpide selgesõnalise teisendamise protsessi nimetatakse tüübi teisendamiseks. Seda nimetatakse ka tüübivalamiseks ja selgesõnaliseks tüübi teisendamiseks.

Tüüp Konversioon

Tüübi teisendamine, tuntud ka kui tüübi valamine, on selge protsess, mille käigus teisendatakse JavaScriptis väärtus ühest andmetüübist teise, kasutades sisseehitatud funktsioone, nagu Number(), String(), Boolean(), parseInt(), ja parseFloat().

Saate teostada tüübiteisendust, edastades argumendina teisendatava väärtuse sisseehitatud teisendusfunktsioonidesse. Need funktsioonid teisendavad seejärel teie väärtuse soovitud tüübiks.

Siin on näide selle kasutamisest Number() funktsioon:

konst numStr = "123";
konst arv = Number(arvStr); // Teisendab stringi arvuks
konsool.log (arv); // 123

Kehtiva arvu stringi argumendina edastamine Number() funktsioon tagastab numbri. Kehtetu arvu stringi edastamine tagastatakse NaN.

Siin on näide selle kasutamisest String() funktsioon:

konst bool = tõsi;
konst str2 = String(bool); // Teisendab tõeväärtuse stringiks
konsool.log (str2); // "tõsi"

Mis tahes andmetüübi, välja arvatud sümboli, edastamine String() funktsioon teisendab andmetüübi stringiks.

Siin on näide selle kasutamisest Boolean() funktsioon:

// Stringi teisendamine tõeväärtuseks (truthy: true, falsy: false)
konst str = "Tere";
konst bool2 = Boolean(str);
konsool.log (bool2); // tõsi

Tõeliste väärtuste edasiandmine Boolean() Funktsioon tagastab tõeväärtuse "tõene", samas kui väärväärtuste edastamine tagastab tõeväärtuse "false".

Siin on näide selle kasutamisest ParseInt() ja ParseFloat() funktsioon:

// Stringi teisendamine täisarvuks
konst numStr = "123.00";
konst arv1 = parseInt(arvStr);
konsool.log (number1); // 123

// Stringi teisendamine ujukomaarvuks
konst floatStr = "3.14";
konst arv2 = parseFloat(floatStr);
konsool.log (number2); // 3.14

The parseInt() funktsioon parsib stringi argumendi ja tagastab täisarvu. The parseFloat() funktsioon teisendab stringi ujukomaarvuks.

Tüübi sunni ja teisendamise võimendamine

Kui mõistate tüübisundi ja teisendamist, saate teha teadlikke otsuseid selle kohta, millal ja kuidas neid koodis tõhusalt kasutada. Oluline on leida õige tasakaal, kasutades tüübisundi läbimõeldult kokkuvõtliku ja mugava koodi jaoks ning tuginedes selgesõnalisele tüübikonversioonile tahtlike ja prognoositavate tüübikonversioonide jaoks.