Þegar ég byrjaði að læra JavaScript var það fyrsta sem ég gerði að búa til lista yfir brellur sem hjálpuðu mér að spara tíma. Ég sá þá frá öðrum forriturum, á mismunandi síðum og í handbókum.
Í þessari grein mun ég sýna þér 12 frábærar leiðir til að bæta og flýta fyrir JavaScript kóðanum þínum. Í flestum tilfellum eru þau alhliða.
Við minnum á:fyrir alla Habr lesendur - 10 rúblur afsláttur þegar þú skráir þig á hvaða Skillbox námskeið sem er með því að nota Habr kynningarkóðann.
Við venjulegar aðstæður þarf miklu meiri kóða til að framkvæma sömu aðgerðina.
Þessi tækni virkar fyrir fylki sem innihalda frumstæðar tegundir: óskilgreint, núll, boolean, streng og tala. Ef þú ert að vinna með fylki sem inniheldur hluti, aðgerðir eða viðbótarfylki þarftu aðra nálgun.
Lengd skyndiminni fylkisins í lotum
HREYSLUR
Þegar þú lærir fyrir lykkjur, fylgirðu venjulegu ferlinu:
for (let i = 0; i < array.length; i++){
console.log(i);
}
Hins vegar, með þessari setningafræði, athugar for lykkjan ítrekað lengd fylkisins í hverri endurtekningu.
Stundum getur þetta verið gagnlegt, en í flestum tilfellum er skilvirkara að vista lengd fylkisins, sem mun krefjast aðgangs að henni. Við getum gert þetta með því að skilgreina lengdarbreytu þar sem við skilgreinum breytuna i, svona:
for (let i = 0, length = array.length; i < length; i++){
console.log(i);
}
Í grundvallaratriðum, nánast það sama og hér að ofan, en með því að auka lykkjustærðina munum við fá verulegan tímasparnað.
Skammhlaupseinkunn (McCarthy einkunn)
SKILYRÐIR Rekstraraðilar
Þrjár rekstraraðili er fljótleg og skilvirk leið til að skrifa einfaldar (og stundum ekki svo einfaldar) skilyrtar staðhæfingar:
x> 100? „meira en 100“: „minna en 100“;
x> 100? (x>200? "meira en 200": "milli 100-200"): "minna en 100";
En stundum er jafnvel þrískiptur rekstraraðili flóknari en krafist er. Við getum notað 'og' && og 'eða' í staðinn || Boolean rekstraraðilar til að meta ákveðnar tjáningar á enn hnitmiðaðri hátt. Það er oft kallað „skammhlaup“ eða „skammhlaupsmat“.
Hvernig virkar þetta
Segjum að við viljum skila aðeins einu af tveimur eða fleiri skilyrðum.
Notkun && mun skila fyrsta ranga gildinu. Ef hver operand er metinn til sanns, þá verður síðasta tjáningin sem metin var skilað.
let one = 1, two = 2, three = 3;
console.log(one && two && three); // Result: 3
console.log(0 && null); // Result: 0
Með því að nota || mun skila fyrsta sanna gildinu. Ef hver operand er metin sem ósönn, þá verður síðasta meta gildið skilað.
let one = 1, two = 2, three = 3;
console.log(one || two || three); // Result: 1
console.log(0 || null); // Result: null
Dæmi 1
Segjum að við viljum skila lengd breytu, en við vitum ekki gerð hennar.
Í þessu tilfelli geturðu notað if/else til að athuga hvort foo sé rétt tegund, en þessi aðferð gæti verið of löng. Þess vegna er betra að taka „skammhlaup“ okkar.
return (foo || []).length;
Ef breytilegt foo hefur viðeigandi lengd, þá verður það skilað. Annars fáum við 0.
Dæmi 2
Hefur þú átt í vandræðum með að fá aðgang að hreiðri hlut? Þú veist kannski ekki hvort hlutur eða ein af undireiginleikum hans er til og það getur leitt til vandamála.
Til dæmis vildum við fá aðgang að gagnaeiginleikanum í this.state, en gögn eru ekki skilgreind fyrr en forritið okkar skilar niðurhalsbeiðni.
Það fer eftir því hvar við notum það, að kalla this.state.data gæti komið í veg fyrir að forritið ræsist. Til að leysa vandamálið gætum við sett þetta inn í skilyrta tjáningu:
Við getum ekki breytt kóðanum hér að ofan til að nota &&. 'Sækir gögn' && this.state.data rekstraraðili mun skila this.state.data óháð því hvort þau eru óskilgreind eða ekki.
Valfrjáls keðja
Maður gæti stungið upp á því að nota valfrjálsa keðjutengingu þegar reynt er að skila eign djúpt inn í trébyggingu. Svo spurningarmerkið? er aðeins hægt að nota til að sækja eign ef hún er ekki ógild.
Til dæmis gætum við breytt dæminu hér að ofan til að fá þessi.ástandsgögn?..(). Það er, gögnum er aðeins skilað ef gildið er ekki núll.
Eða, ef það skiptir máli hvort ástand er skilgreint eða ekki, gætum við skilað þessum.ástandi?.gögnum.
Umbreyta í Boolean
GERÐUMBREYTING
Auk venjulegra Boolean aðgerða satt og ósatt, meðhöndlar JavaScript einnig öll önnur gildi sem sönn eða ósönn.
Þar til annað er tekið fram eru öll gildi í JavaScript sönn, nema 0, "", núll, óskilgreint, NaN og auðvitað ósatt. Hinar síðarnefndu eru rangar.
Við getum auðveldlega skipt á milli þeirra tveggja með því að nota ! rekstraraðila, sem einnig breytir gerðinni í Boolean.
Það geta verið aðstæður þar sem + verður túlkað sem samtengingaraðgerð frekar en samlagningaraðgerð. Til að forðast þetta ættir þú að nota tildes: ~~. Þessi rekstraraðili jafngildir -n-1. Til dæmis, ~15 er jafnt og -16.
Notkun tveggja tilda í röð útilokar aðgerðina vegna þess að - (- - n - 1) - 1 = n + 1 - 1 = n. Með öðrum orðum, ~-16 er jafnt og 15.
Frá og með ES7 er hægt að nota veldisvísisoperator ** sem styttingu fyrir krafta. Þetta er miklu hraðari en að nota Math.pow(2, 3). Það virðist einfalt, en þetta atriði er innifalið í lista yfir tækni, þar sem það er ekki getið alls staðar.
console.log(2 ** 3); // Result: 8
Það ætti ekki að rugla saman við táknið ^, sem er almennt notað fyrir veldisvísitölu. En í JavaScript er þetta XOR rekstraraðilinn.
Fyrir ES7 var aðeins hægt að nota ** flýtileiðina fyrir krafta í grunni 2 með því að nota bitavísis vinstri vaktstjórnanda <<:
Math.pow(2, n);
2 << (n - 1);
2**n;
Til dæmis jafngildir 2 << 3 = 16 2 ** 4 = 16.
Fljóta í heiltölu
REKSTUR / GERÐUMBREYTING
Ef þú þarft að breyta floti í heiltölu geturðu notað Math.floor(), Math.ceil() eða Math.round(). En það er hraðari leið, til þess notum við |, það er OR rekstraraðila.
Hegðun | fer að miklu leyti eftir því hvort þú ert að fást við jákvæðar eða neikvæðar tölur, þannig að þessi aðferð hentar aðeins ef þú ert öruggur í því sem þú ert að gera.
n | 0 fjarlægir allt á eftir tugaskiljunni og styttir flotið í heila tölu.
Þú getur fengið sömu námundunaráhrif með því að nota ~~. Eftir þvingaða umbreytingu í heiltölu helst gildið óbreytt.
Fjarlægir slóðnúmer
Hægt er að nota OR rekstraraðila til að fjarlægja hvaða fjölda tölustafa sem er úr númeri. Þetta þýðir að við þurfum ekki að umbreyta gerðum eins og hér:
let str = "1553";
Number(str.substring(0, str.length - 1));
Hægt er að nota ES6 örmerkingar í bekkjaraðferðum og binding er gefið í skyn. Þetta þýðir að þú getur sagt bless við endurteknar tjáningar eins og this.myMethod = this.myMethod.bind(this)!