Uzmanieties no piespiešanas: šī uzlabotā funkcija var izraisīt smalkas kļūdas, tāpēc pārliecinieties, ka zināt, kā tā darbojas.
JavaScript dinamiskā rakstīšana nozīmē, ka jūsu kods var būt nedaudz vienkāršāks, taču joprojām ir iespējams kļūdīties. Lai no tām izvairītos, ir noderīgi zināt, kā JavaScript atrisina dažādu veidu vērtības, lai tās salīdzinātu.
Izpratne par tipu konvertēšanu un piespiešanu JavaScript ir ļoti svarīga, lai rakstītu uzticamas un efektīvas programmas. Katrai koncepcijai ir īpaši lietošanas gadījumi un paraugprakse, kas var ietekmēt jūsu koda darbību.
Kāpēc JavaScript notiek tipa konvertēšana un piespiešana?
JavaScript valoda ir dinamiski drukāts. Tas nozīmē, ka atšķirībā no statiski drukātām valodām JavaScript nav nepieciešams skaidri definēt mainīgā datu tipu pirms tā izmantošanas. Tā vietā JavaScript izpildes laikā nosaka veidu atkarībā no mainīgā vērtības.
Tā kā datu tipi netiek skaidri deklarēti līdz izpildlaikam, kad veicat darbības, kurām nepieciešami dažādi dati veidi, JavaScript automātiski pārbauda to savstarpējo saderību operācijai, kuru vēlaties veikt. Ja tie ir savietojami viens ar otru, darbība norit normāli.
Tomēr pieņemsim, ka tie nav saderīgi ar darbību, piemēram, mēģinot pievienot virkni un numuru. Šādos gadījumos JavaScript automātiski “piespiež” vienu no veidiem, lai tas atbilstu otram, lai nodrošinātu, ka darbība ir veiksmīga, nevis rada kļūdu. Šis process ir pazīstams kā tipa piespiešana vai netieša piespiešana.
Tipa piespiešana
Tipa piespiešana ir automātiska vērtības konvertēšana no viena datu veida uz citu, ko JavaScript veic programmas darbības laikā, lai nodrošinātu veiksmīgu darbības izpildi.
Bet ne visus datu veidus var piespiest. Virkne, skaitlis un Būla ir vienīgie JavaScript datu tipi ka valoda piespiedīsies citā veidā. Mēģinot veikt nesaderīgu darbību ar datu tipiem, kurus JavaScript nevar piespiest, tiks parādīta kļūda.
JavaScript piespiež veidus, pamatojoties uz darbības veidu un operācijā izmantoto operatoru.
Piespiešana ar “+” operatoru
Programmā JavaScript “+” operatoram ir divas dažādas darbības atkarībā no tā operandu veidiem. Tas var veikt gan ciparu saskaitīšanu, gan virkņu savienošanu. Tas var izraisīt tipa piespiešanu, ja viens no operandiem nav gaidītā tipa.
Ja abi operandi ir skaitļi, "+” operators veic pievienošanu:
ļaut num1 = 42;
ļaut num2 = 10;
ļaut summa = num1 + num2; // Papildinājums
konsole.log (summa); // 52
Ja abi operandi ir virknes, "+” operators veic virknes savienošanu:
ļaut str1 = "Sveiki";
ļaut str2 = "pasaule";
ļaut rezultāts = str1 + " " + str2; // Virknes savienošana
konsole.log (rezultāts); // "Sveika pasaule"
Tomēr, ja viens no operandiem nav virkne, JavaScript to netieši piespiedīs virknē pirms savienošanas:
// Skaitlis un virkne
ļaut skaits = 42;
ļaut str = "Sveiki";// skaitlis tiek piespiests virknei un pēc tam savienots
ļaut rezultāts_1 = cipars + str;
konsole.log (rezultāts_1); // "42 Sveiki"// Virkne un Būla
ļaut bool = taisnība;
// bool tiek piespiests uz virkni un pēc tam savienots
ļaut rezultāts_2 = bool + str;
konsole.log (rezultāts_2); // "trueHello"
Piespiešana ar “-” operatoru
Programmā JavaScript “-” operators galvenokārt tiek izmantots atņemšanas darbībām. Kad viens vai abi operandi operācijā, kas ietver "-” operators nav skaitlis, JavaScript mēģinās to piespiest par skaitli.
Ja abi operandi ir skaitļi, JavaScript veic atņemšanu. Tas arī veic atņemšanu, ja viens vai abi operandi ir virknes, kas apzīmē skaitli:
konst num1 = 10;
konst num2 = 20;
konst rezultāts_1 = num2 - num1; // Atņemšana
konsole.log (rezultāts_1); // 10
konst strNum = "10";
konst strNum2 = "20";
konst rezultāts = strNum2 - strNum; // Ierakstiet skaitļiem piespiešanu, pēc tam atņemšanu
konsole.log (rezultāts_1); // 10
Ja neviens no operandiem nav skaitlis vai virkne, kas apzīmē skaitli, JavaScript mēģinās piespiest datu tipu līdz tā skaitliskajam ekvivalentam. Ja datu tipam nav skaitliska ekvivalenta, darbība tiks atgriezta NaN (nav cipars):
// patiess tiek piespiests līdz 1, false tiek piespiests līdz 0
konst boolNum = taisnība;
konst boolNum2 = viltus;
konst rezultāts_1 = boolNum - boolNum2;
konsole.log (rezultāts_1); // 1// tukši masīvi tiek piespiesti līdz 0
konst arrNum = [];
konst arrNum2 = [];
konst rezultāts_2 = arrNum - arrNum2;
konsole.log (rezultāts_2); // 0
// tukši objekti tiek piespiesti NaN
konst objNum = {};
konst rezultāts_3 = arrNum - objNum;
konsole.log (rezultāts_3); // 0 - NaN = NaN
Šajā piemērā JavaScript piespiež Būla vērtības taisnība un viltus to skaitliskām ekvivalentām vērtībām, 1 un 0, attiecīgi. Tukši masīvi tiek piespiesti 0, un tukši objekti tiek piespiesti NaN.
Piespiešana ar vienlīdzību (==)/() operatoriem
Programmā JavaScript vienlīdzības operatori (== un ) salīdzināt vienlīdzības vērtības. Tomēr viņi uzvedas atšķirīgi tipa piespiešanas dēļ.
"==” (vaļīgā vienlīdzība) operators veic tipa piespiešanu, kas nozīmē, ka pirms salīdzināšanas mēģina konvertēt operandus uz tāda paša veida:
"10" == 10; // taisnība
Šajā piemērā JavaScript piespiež virkni “10” uz skaitli 10, tāpēc izteiksme tiek novērtēta kā taisnība.
Tomēr "” (stingrā vienlīdzība) operators tipa piespiešanu neveic. Tas prasa, lai vērtība un veids būtu vienādi, lai salīdzinājums atgrieztos taisnība:
"10"10; // viltus
Šajā piemērā atgriežas salīdzinājums viltus jo operandi ir dažāda veida (virkne un skaitlis).
Parasti jums vajadzētu izmantot (stingra vienlīdzība) operatoru JavaScript, lai izvairītos no negaidītas veida piespiešanas.
Tipa piespiešana vai netieša pārveidošana var izraisīt neparedzētu darbību tā automātiskā rakstura dēļ. Gadījumos, kad nepieciešams konvertēt tipus, ieteicams tos tieši konvertēt. Tipu skaidras konvertēšanas process ir pazīstams kā tipa konvertēšana. To dēvē arī par tipa liešanu un precīzo tipa pārveidošanu.
Veids Conversion
Tipa konvertēšana, kas pazīstama arī kā tipa atrašana, ir nepārprotams process, kurā JavaScript pārveido vērtību no viena datu veida uz citu, izmantojot iebūvētas funkcijas, piemēram, Skaitlis(), Virkne(), Būla(), parseInt(), un parseFloat().
Varat veikt tipa konvertēšanu, kā argumentu nododot konvertējamo vērtību iebūvētajām konvertēšanas funkcijām. Pēc tam šīs funkcijas pārvērš jūsu vērtību vēlamajā veidā.
Šeit ir piemērs, izmantojot Skaitlis() funkcija:
konst numStr = "123";
konst skaits = Numurs(skaitsStr); // Pārvērš virkni par skaitli
konsole.log (num); // 123
Virknes, kas ir derīgs skaitlis, kā argumentu nosūtīšana Skaitlis() funkcija atgriezīs skaitli. Nosūtot virkni, kas ir nederīgs skaitlis, atgriezīsies NaN.
Šeit ir piemērs, izmantojot Virkne() funkcija:
konst bool = taisnība;
konst str2 = Stīga(bool); // Būla vērtību pārvērš par virkni
konsole.log (str2); // "patiesa"
Jebkuru datu tipu, izņemot simbolu, nodošana Virkne() funkcija pārveidos datu tipu par virkni.
Šeit ir piemērs, izmantojot Būla() funkcija:
// Virknes pārvēršana par Būla vērtību (truthy: true, falsy: false)
konst str = "Sveiki";
konst bool2 = Būla(str);
konsole.log (bool2); // taisnība
Patiesu vērtību nodošana Būla() funkcija atgriež Būla vērtību “true”, savukārt, nododot nepatiesas vērtības, atgriež Būla vērtību “false”.
Šeit ir piemērs, izmantojot ParseInt() un ParseFloat() funkcija:
// Pārvērst virkni par veselu skaitli
konst numStr = "123.00";
konst num1 = parseInt(skaitsStr);
konsole.log (num1); // 123
// Virknes pārvēršana par peldošā komata skaitli
konst floatStr = "3.14";
konst num2 = parseFloat(floatStr);
konsole.log (num2); // 3.14
The parseInt() funkcija parsē virknes argumentu un atgriež veselu skaitli. The parseFloat() funkcija pārvērš virkni peldošā komata skaitļā.
Veida piespiešanas un konversijas izmantošana
Izprotot veidu piespiešanu un pārveidošanu, varat pieņemt apzinātus lēmumus par to, kad un kā tos efektīvi izmantot savā kodā. Ir svarīgi panākt pareizo līdzsvaru, saprātīgi izmantojot tipa piespiešanu, lai kods būtu īss un ērts, un paļaujoties uz nepārprotamu tipa pārveidošanu tīšiem un paredzamiem tipa pārveidojumiem.