12 JavaScript triki, kurus izlaiž lielÄkÄ daļa apmÄcÄ«bu
Kad sÄku mÄcÄ«ties JavaScript, pirmais, ko izdarÄ«ju, bija sarakstu ar trikiem, kas man palÄ«dzÄja ietaupÄ«t laiku. Es tos pamanÄ«ju no citiem programmÄtÄjiem, dažÄdÄs vietnÄs un rokasgrÄmatÄs.
Å ajÄ rakstÄ es jums parÄdÄ«Å”u 12 lieliskus veidus, kÄ uzlabot un paÄtrinÄt JavaScript kodu. VairumÄ gadÄ«jumu tie ir universÄli.
Objekta tips Set tika ieviests ES6 kopÄ ar..., izplatÄ«bas operatoru, mÄs varam to izmantot, lai izveidotu jaunu masÄ«vu, kurÄ ir tikai unikÄlas vÄrtÄ«bas.
ParastÄ situÄcijÄ vienas un tÄs paÅ”as darbÄ«bas veikÅ”anai ir nepiecieÅ”ams daudz vairÄk koda.
Å is paÅÄmiens darbojas masÄ«viem, kas satur primitÄ«vus tipus: nenoteikts, nulles, BÅ«la, virknes un numuru. Ja strÄdÄjat ar masÄ«vu, kurÄ ir objekti, funkcijas vai papildu masÄ«vi, jums bÅ«s nepiecieÅ”ama cita pieeja.
KeÅ”atmiÅas masÄ«va garums ciklos
CIKLI
ApgÅ«stot cilpas, jums jÄievÄro standarta procedÅ«ra:
for (let i = 0; i < array.length; i++){
console.log(i);
}
TomÄr, izmantojot Å”o sintaksi, cilpa for atkÄrtoti pÄrbauda masÄ«va garumu katrÄ iterÄcijÄ.
Dažreiz tas var bÅ«t noderÄ«gi, taÄu vairumÄ gadÄ«jumu efektÄ«vÄk ir saglabÄt masÄ«va garumu keÅ”atmiÅÄ, kas prasÄ«s vienu piekļuvi. MÄs to varam izdarÄ«t, definÄjot garuma mainÄ«go, kur mÄs definÄjam mainÄ«go i, piemÄram:
for (let i = 0, length = array.length; i < length; i++){
console.log(i);
}
PrincipÄ gandrÄ«z tÄds pats kÄ iepriekÅ”, bet, palielinot cilpas izmÄru, mÄs iegÅ«sim ievÄrojamu laika ietaupÄ«jumu.
ÄŖssavienojuma vÄrtÄjums (McCarthy reitings)
NOSACÄŖJUMI OPERATORI
TrÄ«skÄrÅ”ais operators ir Ätrs un efektÄ«vs veids, kÄ rakstÄ«t vienkÄrÅ”us (un dažreiz ne tik vienkÄrÅ”us) nosacÄ«jumu paziÅojumus:
Bet dažreiz pat trÄ«skÄrÅ”ais operators ir sarežģītÄks nekÄ nepiecieÅ”ams. MÄs varam izmantot "un" && un "or" vietÄ || BÅ«la operatori, lai vÄl kodolÄ«gÄk novÄrtÄtu noteiktas izteiksmes. To bieži sauc par "Ä«ssavienojumu" vai "Ä«ssavienojuma reitingu".
KÄ tas darbojas
PieÅemsim, ka vÄlamies atgriezt tikai vienu no diviem vai vairÄkiem nosacÄ«jumiem.
Izmantojot &&, tiks atgriezta pirmÄ nepatiesÄ vÄrtÄ«ba. Ja katra operanda vÄrtÄ«ba ir patiesa, tiks atgriezta pÄdÄjÄ novÄrtÄtÄ izteiksme.
let one = 1, two = 2, three = 3;
console.log(one && two && three); // Result: 3
console.log(0 && null); // Result: 0
Izmantojot || atgriezÄ«s pirmo patieso vÄrtÄ«bu. Ja katra operanda vÄrtÄ«ba ir nepatiesa, tiks atgriezta pÄdÄjÄ novÄrtÄtÄ vÄrtÄ«ba.
let one = 1, two = 2, three = 3;
console.log(one || two || three); // Result: 1
console.log(0 || null); // Result: null
piemÄrs 1
PieÅemsim, ka mÄs vÄlamies atgriezt mainÄ«gÄ lieluma garumu, bet nezinÄm tÄ veidu.
Å ajÄ gadÄ«jumÄ varat izmantot if/else, lai pÄrbaudÄ«tu, vai foo ir pareizais veids, taÄu Ŕī metode var bÅ«t pÄrÄk gara. TÄpÄc labÄk ir izmantot mÅ«su āÄ«ssavienojumuā.
return (foo || []).length;
Ja mainÄ«gajam foo ir piemÄrots garums, tas tiks atgriezts. PretÄjÄ gadÄ«jumÄ mÄs iegÅ«sim 0.
piemÄrs 2
Vai jums ir bijuÅ”as problÄmas ar piekļuvi ligzdotam objektam? JÅ«s varat nezinÄt, vai objekts vai kÄds no tÄ apakŔīpaÅ”umiem pastÄv, un tas var radÄ«t problÄmas.
PiemÄram, mÄs vÄlÄjÄmies piekļūt datu rekvizÄ«tam statusÄ this.state, taÄu dati nav definÄti, kamÄr mÅ«su programma neatgriež izgÅ«Å”anas pieprasÄ«jumu.
AtkarÄ«bÄ no tÄ, kur mÄs to izmantojam, Ŕī.state.data izsaukÅ”ana var neļaut lietojumprogrammai startÄt. Lai atrisinÄtu problÄmu, mÄs to varÄtu ietÄ«t nosacÄ«juma izteiksmÄ:
LabÄks risinÄjums bÅ«tu izmantot operatoru "vai".
return (this.state.data || 'Fetching Data');
MÄs nevaram mainÄ«t iepriekÅ” minÄto kodu, lai izmantotu &&. Operators āDatu ieneÅ”anaā && this.state.data atgriezÄ«s this.state.data neatkarÄ«gi no tÄ, vai tie ir nedefinÄti.
PÄc izvÄles Ä·Äde
MÄÄ£inot atgriezt Ä«paÅ”umu dziļi koka struktÅ«rÄ, varÄtu ieteikt izmantot neobligÄtu Ä·Ädi. TÄtad jautÄjuma zÄ«mes simbols? var izmantot, lai izgÅ«tu Ä«paÅ”umu tikai tad, ja tas nav nulle.
PiemÄram, mÄs varÄtu pÄrveidot iepriekÅ” minÄto piemÄru, lai iegÅ«tu this.state.data?..(). Tas ir, dati tiek atgriezti tikai tad, ja vÄrtÄ«ba nav nulle.
Vai arÄ«, ja ir svarÄ«gi, vai stÄvoklis ir definÄts vai nÄ, mÄs varÄtu atgriezt this.state?.data.
KonvertÄt uz BÅ«la
TIPA PÄRVÄRÅ ANA
Papildus parastajÄm BÅ«la funkcijÄm patiesa un nepatiesa, JavaScript arÄ« visas pÄrÄjÄs vÄrtÄ«bas uzskata par patiesÄm vai nepatiesÄm.
KamÄr nav norÄdÄ«ts citÄdi, visas JavaScript vÄrtÄ«bas ir patiesas, izÅemot 0, "", nulles, undefined, NaN un, protams, false. PÄdÄjie ir viltoti.
MÄs varam viegli pÄrslÄgties starp abiem, izmantojot operatoru !, kas arÄ« pÄrveido veidu par BÅ«la vÄrtÄ«bu.
Var bÅ«t situÄcijas, kad + tiks interpretÄts kÄ savienoÅ”anas operators, nevis pievienoÅ”anas operators. Lai no tÄ izvairÄ«tos, jums vajadzÄtu izmantot tildes: ~~. Å is operators ir lÄ«dzvÄrtÄ«gs -n-1. PiemÄram, ~15 ir vienÄds ar -16.
Izmantojot divas tildes pÄc kÄrtas, darbÄ«ba tiek noliegta, jo - (- - n - 1) - 1 = n + 1 - 1 = n. Citiem vÄrdiem sakot, ~-16 ir vienÄds ar 15.
SÄkot ar ES7, jÅ«s varat izmantot kÄpinÄÅ”anas operatoru ** kÄ pilnvaru saÄ«sinÄjumu. Tas ir daudz ÄtrÄk nekÄ izmantojot Math.pow(2, 3). Å Ä·iet vienkÄrÅ”i, bet Å”is punkts ir iekļauts paÅÄmienu sarakstÄ, jo tas nav minÄts visur.
console.log(2 ** 3); // Result: 8
To nevajadzÄtu sajaukt ar simbolu ^, ko parasti izmanto kÄpinÄÅ”anai. Bet JavaScript tas ir XOR operators.
Pirms ES7 saÄ«sni ** varÄja izmantot tikai 2. bÄzes pakÄpÄm, izmantojot bitu pa kreisi nobÄ«des operatoru <<:
Math.pow(2, n);
2 << (n - 1);
2**n;
PiemÄram, 2 << 3 = 16 ir ekvivalents 2** 4 = 16.
PeldÄt lÄ«dz veselam skaitlim
OPERÄCIJAS / TIPA PÄRVÄRÅ ANA
Ja jums ir jÄpÄrvÄrÅ” pludiÅÅ” par veselu skaitli, varat izmantot Math.floor(), Math.ceil() vai Math.round(). Bet ir ÄtrÄks veids, Å”im nolÅ«kam mÄs izmantojam |, tas ir, operatoru VAI.
UzvedÄ«ba | lielÄ mÄrÄ ir atkarÄ«gs no tÄ, vai jums ir darÄ«Å”ana ar pozitÄ«viem vai negatÄ«viem skaitļiem, tÄpÄc Ŕī metode ir piemÄrota tikai tad, ja esat pÄrliecinÄts par to, ko darÄt.
n | 0 noÅem visu pÄc decimÄldaļas atdalÄ«tÄja, saÄ«sinot pludiÅu lÄ«dz veselam skaitlim.
JÅ«s varat iegÅ«t tÄdu paÅ”u noapaļoÅ”anas efektu, izmantojot ~~. PÄc piespiedu konvertÄÅ”anas uz veselu skaitli vÄrtÄ«ba paliek nemainÄ«ga.
Beigu skaitļu noÅemÅ”ana
Operatoru VAI var izmantot, lai no skaitļa noÅemtu jebkuru ciparu skaitu. Tas nozÄ«mÄ, ka mums nav jÄpÄrveido veidi, piemÄram, Å”eit:
let str = "1553";
Number(str.substring(0, str.length - 1));
ES6 bultiÅu apzÄ«mÄjumus var izmantot klases metodÄs, un tas nozÄ«mÄ saistÄ«Å”anu. Tas nozÄ«mÄ, ka varat atvadÄ«ties no tÄdÄm atkÄrtotÄm izteiksmÄm kÄ this.myMethod = this.myMethod.bind(this)!
IespÄjams, jÅ«s jau esat izmantojis JSON.stringify. Vai zinÄjÄt, ka tas palÄ«dz formatÄt jÅ«su JSON?
Stringify() metodei ir nepiecieÅ”ami divi izvÄles parametri: aizstÄjÄja funkcija, ko var izmantot, lai filtrÄtu parÄdÄ«to JSON, un atstarpes vÄrtÄ«ba.
console.log(JSON.stringify({ alpha: 'A', beta: 'B' }, null, 't'));
// Result:
// '{
// "alpha": A,
// "beta": B
// }'
Tas arÄ« viss, es ceru, ka visas Ŕīs metodes bija noderÄ«gas. KÄdus trikus jÅ«s zinÄt? Rakstiet tos komentÄros.