12 „JavaScript“ gudrybių, kurių pasigenda dauguma vadovėlių
Kai pradėjau mokytis JavaScript, pirmas dalykas, kurį padariau, buvo sudarytas gudrybių, kurios padėjo sutaupyti laiko, sąrašas. Aš juos pastebėjau iš kitų programuotojų, įvairiose svetainėse ir vadovuose.
Šiame straipsnyje parodysiu 12 puikių būdų, kaip pagerinti ir pagreitinti JavaScript kodą. Daugeliu atvejų jie yra universalūs.
Primename:visiems „Habr“ skaitytojams – 10 000 rublių nuolaida užsiregistravus į bet kurį „Skillbox“ kursą naudojant „Habr“ reklamos kodą.
Įprastoje situacijoje tai pačiai operacijai atlikti reikia daug daugiau kodo.
Šis metodas tinka masyvams, kuriuose yra primityvių tipų: neapibrėžtas, nulinis, loginis, eilutė ir skaičius. Jei dirbate su masyvu, kuriame yra objektai, funkcijos arba papildomi masyvai, jums reikės kitokio požiūrio.
for (let i = 0; i < array.length; i++){
console.log(i);
}
Tačiau naudojant šią sintaksę, ciklas for pakartotinai tikrina masyvo ilgį kiekvieną iteraciją.
Kartais tai gali būti naudinga, tačiau daugeliu atvejų efektyviau išsaugoti masyvo ilgį talpykloje, o tam reikės vienos prieigos. Tai galime padaryti apibrėždami ilgio kintamąjį, kur apibrėžiame kintamąjį i, kaip nurodyta:
for (let i = 0, length = array.length; i < length; i++){
console.log(i);
}
Iš esmės beveik tas pats, kas aukščiau, tačiau padidinę kilpos dydį sutaupysime daug laiko.
Trumpojo jungimo įvertinimas (McCarthy reitingas)
SĄLYGINIAI OPERATORIAI
Trinaris operatorius yra greitas ir efektyvus būdas parašyti paprastus (o kartais ir ne tokius paprastus) sąlyginius teiginius:
x> 100? „daugiau nei 100“: „mažiau nei 100“;
x> 100? (x>200? "daugiau nei 200": "tarp 100-200"): "mažiau nei 100";
Tačiau kartais net trijų dalių operatorius yra sudėtingesnis nei reikalaujama. Vietoj to galime naudoti „ir“ && ir „arba“ || Būlio operatoriai, norėdami dar glaustai įvertinti tam tikras išraiškas. Jis dažnai vadinamas „trumpuoju jungimu“ arba „trumpojo jungimo įvertinimu“.
Kaip tai veikia
Tarkime, kad norime grąžinti tik vieną iš dviejų ar daugiau sąlygų.
Naudojant && bus grąžinta pirmoji klaidinga reikšmė. Jei kiekvieno operando vertė yra teisinga, tada bus grąžinta paskutinė įvertinta išraiška.
let one = 1, two = 2, three = 3;
console.log(one && two && three); // Result: 3
console.log(0 && null); // Result: 0
Naudojant || grąžins pirmąją tikrąją vertę. Jei kiekvieno operando vertė yra klaidinga, bus grąžinta paskutinė įvertinta reikšmė.
let one = 1, two = 2, three = 3;
console.log(one || two || three); // Result: 1
console.log(0 || null); // Result: null
Pavyzdys 1
Tarkime, kad norime grąžinti kintamojo ilgį, bet nežinome jo tipo.
Tokiu atveju galite naudoti if/else, kad patikrintumėte, ar foo yra tinkamas tipas, tačiau šis metodas gali būti per ilgas. Todėl geriau imtis mūsų „trumpojo jungimo“.
return (foo || []).length;
Jei kintamasis foo yra tinkamo ilgio, jis bus grąžintas. Priešingu atveju gausime 0.
Pavyzdys 2
Ar kilo problemų pasiekiant įdėtą objektą? Galite nežinoti, ar objektas ar viena iš jo subypatybių egzistuoja, ir tai gali sukelti problemų.
Pavyzdžiui, norėjome pasiekti duomenų ypatybę this.state, bet duomenys neapibrėžiami tol, kol programa nepateikia gavimo užklausos.
Priklausomai nuo to, kur ją naudojame, iškvietus this.state.data programa gali nepasileisti. Norėdami išspręsti problemą, galėtume tai suvynioti į sąlyginę išraišką:
Geresnis pasirinkimas būtų naudoti operatorių „arba“.
return (this.state.data || 'Fetching Data');
Negalime pakeisti anksčiau pateikto kodo, kad būtų naudojamas &&. Operatorius „Duomenų gavimas“ && this.state.data pateiks this.state.data neatsižvelgiant į tai, ar jie neapibrėžti, ar ne.
Neprivaloma grandinė
Bandant grąžinti nuosavybę giliai į medžio struktūrą, būtų galima pasiūlyti naudoti pasirenkamą grandininę funkciją. Taigi, klaustuko simbolis? gali būti naudojamas norint gauti nuosavybę tik tuo atveju, jei ji nėra nulinė.
Pavyzdžiui, galėtume perdaryti anksčiau pateiktą pavyzdį, kad gautume this.state.data?..(). Tai reiškia, kad duomenys grąžinami tik tuo atveju, jei reikšmė nėra nulinė.
Arba, jei svarbu, ar būsena apibrėžta, ar ne, galime grąžinti this.state?.data.
Konvertuoti į Būlio
TIPO KONVERSIJA
Be įprastų loginių funkcijų true ir false, JavaScript taip pat traktuoja visas kitas reikšmes kaip teisingas arba klaidingas.
Kol nenurodyta kitaip, visos „JavaScript“ reikšmės yra teisingos, išskyrus 0, „“, null, neapibrėžta, NaN ir, žinoma, false. Pastarieji yra melagingi.
Galime lengvai persijungti tarp dviejų naudodami operatorių !, kuris taip pat konvertuoja tipą į loginį.
Gali būti situacijų, kai + bus interpretuojamas kaip sujungimo operatorius, o ne kaip pridėjimo operatorius. Norėdami to išvengti, turėtumėte naudoti tildes: ~~. Šis operatorius yra lygus -n-1. Pavyzdžiui, ~15 yra lygus -16.
Naudojant dvi tildes iš eilės operacija paneigiama, nes - (- - n - 1) - 1 = n + 1 - 1 = n. Kitaip tariant, ~-16 yra lygus 15.
Pradedant nuo ES7, galite naudoti eksponencijos operatorių ** kaip galių trumpinį. Tai daug greičiau nei naudojant Math.pow(2, 3). Atrodo paprasta, tačiau šis punktas yra įtrauktas į metodų sąrašą, nes jis minimas ne visur.
console.log(2 ** 3); // Result: 8
Jo nereikėtų painioti su simboliu ^, kuris dažniausiai naudojamas eksponencijai. Bet JavaScript tai yra XOR operatorius.
Prieš ES7 spartusis klavišas ** galėjo būti naudojamas tik 2 bazės galioms, naudojant bitų poslinkio į kairę operatorių <<:
Math.pow(2, n);
2 << (n - 1);
2**n;
Pavyzdžiui, 2 << 3 = 16 atitinka 2** 4 = 16.
Plūduriuoti iki sveikojo skaičiaus
OPERACIJOS / TIPO KONVERSIJA
Jei reikia konvertuoti slankųjį skaičių į sveikąjį skaičių, galite naudoti Math.floor(), Math.ceil() arba Math.round(). Tačiau yra greitesnis būdas, tam mes naudojame |, tai yra, operatorių OR.
Elgesys | labai priklauso nuo to, ar turite reikalų su teigiamais ar neigiamais skaičiais, todėl šis metodas tinka tik tuo atveju, jei esate įsitikinęs tuo, ką darote.
n | 0 pašalina viską po dešimtainio skyriklio, sutrumpina slankiąją reikšmę iki sveikojo skaičiaus.
Tą patį apvalinimo efektą galite gauti naudodami ~~. Po priverstinio konvertavimo į sveikąjį skaičių vertė lieka nepakitusi.
Pašalinami galiniai numeriai
Operatorius OR gali būti naudojamas norint pašalinti bet kokį skaičių skaitmenų iš skaičiaus. Tai reiškia, kad mums nereikia konvertuoti tipų, kaip čia:
let str = "1553";
Number(str.substring(0, str.length - 1));
ES6 rodyklių žymėjimai gali būti naudojami klasių metoduose ir yra numanomas įrišimas. Tai reiškia, kad galite atsisveikinti su pasikartojančiomis išraiškomis, tokiomis kaip this.myMethod = this.myMethod.bind(this)!