
Kui ma alustasin JavaScripti Ôppimist, tegin ma kohe nimekirja nippidest, mis aitasid mul aega sÀÀsta. Vaatasin neid teiste programmeerijate juurest, erinevates veebilehtedes ja juhendites.
Selles artiklis nÀitan ma 12 suurepÀrast viisi, kuidas oma JavaScripti koodi parandada ja kiirendada. Enamikul juhtudel on need universaalsed.
Tuletame meelde: kĂ”igile «Habra» lugejatele â 10 000 rubla soodustus, kui registreerite end Skillboxi mis tahes kursusele promokoodi «Habr» abil.
Skillbox soovitab: Praktiline kursus .
Unikaalsete vÀÀrtuste filtreerimine
MASSED
Objekti tĂŒĂŒp Set, mis on tutvustatud ES6-s, koos âŠ, levitamisoperaatoriga, saame seda kasutada uue massiivi loomiseks, mis sisaldab ainult unikaalseid vÀÀrtusi.
const array = [1, 1, 2, 3, 5, 5, 1]
const uniqueArray = [...new Set(array)];
console.log(uniqueArray); // Tulemuseks: [1, 2, 3, 5]Tavalistes olukordades vajaks sama operatsiooni tegemiseks palju rohkem koodi.
See nipp töötab massiivide puhul, mis sisaldavad primitiivseid tĂŒĂŒpe: undefined, null, boolean, string ja number. Kui töötate massiiviga, mis sisaldab objekte, funktsioone vĂ”i tĂ€iendavaid massiive, vajate teistsugust lĂ€henemist.
Cache-massiivi pikkus tsĂŒklites
TSĂKLID
Kui Ă”pite for-lauseid tsĂŒklite jaoks, jĂ€rgite standardset protseduuri:
for (let i = 0; i < array.length; i++){
console.log(i);
}Siiski kontrollib for-sĂŒntaks massiivi pikkust igal itereerimisel uuesti.
MĂ”nikord vĂ”ib see olla kasulik, kuid enamasti on efektiivsem massiivi pikkust vahemĂ€letada, mis vajab vaid ĂŒhte juurdepÀÀsu. Saame seda teha, mÀÀrates pikkuse muutujana, nĂ€iteks nii:
for (let i = 0, length = array.length; i < length; i++){
console.log(i);
}PĂ”himĂ”tteliselt on see peaaegu sama, mis eelnevalt, kuid tsĂŒkli suuruse suurendamisel saame mĂ€rkimisvÀÀrset ajakulu kokkuhoidu.
LĂŒhiĂŒlevaade (McCarthy hinnang)
TINGIMUSOPERAATORID
Ternaarne operaator on kiire ja efektiivne viis lihtsate (ja mÔnikord ka mitte nii lihtsate) tingimuslause kirjutamiseks:
x > 100 ? "rohkem kui 100" : "vÀhem kui 100";
x > 100 ? (x > 200 ? "rohkem kui 200" : "vahemikus 100-200") : "vÀhem kui 100";
Kuid mĂ”nikord on isegi ternaarne operaator keerulisem, kui vajalik. Selle asemel vĂ”ime kasutada 'and' && ja 'or' || loogilisi operaatorid, et hinnata mĂ”ningaid vĂ€ljendeid veelgi lĂŒhemalt. Seda nimetatakse sageli "lĂŒhiĂŒlevaateks" vĂ”i "lĂŒhiĂŒlevaate hindamiseks".
Kuidas see toimib
Oletame, et soovime tagastada ainult ĂŒhe kahel vĂ”i enam tingimusel.
Kasutamine && tagastab esimese vale vÀÀrtuse. Kui iga operand hindab tÔeks, siis tagastatakse viimane arvutatud vÀljend.
let one = 1, two = 2, three = 3;
console.log(one && two && three); // Tulem: 3
console.log(0 && null); // Tulem: 0Kasutamine || vÔimaldab tagastada esimese tÔese vÀÀrtuse. Kui iga operand hindab vale, siis tagastatakse viimane arvutatud vÀÀrtus.
let one = 1, two = 2, three = 3;
console.log(one || two || three); // Tulem: 1
console.log(0 || null); // Tulem: nullNĂ€ide 1
Oletame, et soovime tagastada muutujat length, kuid ei tea, mis on tema tĂŒĂŒp.
Sellisel juhul saame kasutada if/else, et kontrollida, kas foo on Ă”ige tĂŒĂŒp, kuid see meetod vĂ”ib osutuda liiga pikaks. SeetĂ”ttu on parem kasutada meie 'lĂŒhikest sulgemist'.
return (foo || []).length;Kui muutuja foo omab sobivat length, siis see tagastatakse. Vastasel juhul saame 0.
NĂ€ide 2
Kas olete kogenud probleeme sissekaetud objekti juurde pÀÀsemisega? Te ei pruugi teada, kas objekt vĂ”i ĂŒks tema alamomadustest eksisteerib, ja see vĂ”ib pĂ”hjustada probleeme.
NÀiteks soovisime pÀÀseda juurde this.state omadusele data, kuid data ei ole mÀÀratletud, kuni meie programm ei tagasta pÀringu valiku.
SÔltuvalt sellest, kus me seda kasutame, vÔib this.state.data kutse takistada rakenduse kÀivitumist. Probleemi lahendamiseks vÔiksime selle panna tingimuslause sisse:
if (this.state.data) {
return this.state.data;
} else {
return 'Andmete laadimine';
}Sobivam variant oleks kasutada 'or' operaatorit.
return (this.state.data || 'Andmete laadimine');Me ei saa ĂŒlaltoodud koodi muuta nii, et kasutada '&&'. Operaator âAndmete laadimineâ && this.state.data tagastab this.state.data, sĂ”ltumata sellest, kas see on mÀÀratlemata vĂ”i mitte.
Valikuline ahel
Soovitame kasutada valikulist ahelat, pĂŒĂŒdes tagastada omadust sĂŒgaval puustruktuuris. Seega vĂ”ib kĂŒsimĂ€rk ? olla kasutusel omaduse vĂ€ljavĂ”tmiseks, ainult siis, kui see ei ole null (null).
NĂ€iteks vĂ”iksime eelmise nĂ€ite ĂŒmber kirjutada, saades this.state.data?.. (). See tĂ€hendab, et data tagastatakse ainult siis, kui vÀÀrtus ei ole null.
VÔi, kui on oluline, kas state on mÀÀratletud vÔi mitte, vÔiksime tagastada this.state?.data.
TĂŒĂŒpide konverteerimine
TĂŒĂŒpide KONVERTIMINE
Lisaks tavalistele loogilistele funktsioonidele true ja false, kÀsitleb JavaScript ka kÔiki teisi vÀÀrtusi kui truthy vÔi falsy.
Kuni on mÀrgitud teisiti, on kÔik JavaScriptis vÀÀrtused truthy, vÀlja arvatud 0, "", null, undefined, NaN ja loomulikult false. Viimased on falsy.
Saame hĂ”lpsasti vahetada nende vahel, kasutades operaatorit !, mis teisendab tĂŒĂŒbi ka loogiliseks.
const isTrue = !0;
const isFalse = !1;
const alsoFalse = !!0;
console.log(true); // Tulem: true
console.log(typeof true); // Tulem: "boolean"Stringiks teisendamine
TĂŒĂŒpide KONVERTIMINE
TÀisarvu kiireks stringiks teisendamiseks saab kasutada jÀrgmist.
const val = 1 + "";
console.log(val); // Tulem: "1"
console.log(typeof val); // Tulem: "string"TĂ€isarvuks teisendamine
TĂŒĂŒpide KONVERTIMINE
Tagasi teisendamine toimub jÀrgmiselt.
let int = "15";
int = +int;
console.log(int); // Tulem: 15
console.log(typeof int); // Tulem: "number"Seda meetodit saab kasutada ka loogilise andmetĂŒĂŒbi boolean teisendamiseks tavaliseks numbriliseks vÀÀrtuseks, nagu on nĂ€idatud allpool:
console.log(+true); // Tulem: 1
console.log(+false); // Tulem: 0VÔivad olla olukorrad, kus + tÔlgendatakse konkateneerimise operaatorina, mitte liitmisena. Selle vÀltimiseks tasub kasutada tilde: ~~. See operaator on vÔrdne vÀljendiga -n-1. NÀiteks ~ 15 on -16.
Kaks jĂ€rjestikust tilde'i kasutamine tĂŒhistab operatsiooni, sest â (- â n â 1) â 1 = n + 1 â 1 = n. TeisisĂ”nu, ~ -16 on vĂ”rdne 15-ga.
const int = ~~"15"
console.log(int); // Tulem: 15
console.log(typeof int); // Tulem: "number"<Quick Powers
OPERAATSIOONID
Alates ES7-st saab kasutada astmeoperaatorit ** lĂŒhendina astmete jaoks. See on palju kiirem kui Math.pow(2, 3) kasutamine. Tundub lihtne, kuid see punkt on loendisse lisatud, kuna seda ei mainita alati.
console.log(2 ** 3); // Tulem: 8Ărge segage seda sĂŒmboliga ^, mida tavaliselt kasutatakse astme tĂ”stmiseks. Kuid JavaScriptis on see XOR operaatĐŸŃ.
Enne ES7 lĂŒhendit ** sai kasutada ainult astme 2 korral, kasutades vasakpoolsest nihutamise operaatorit <<:
Math.pow(2, n);
2 << (n - 1);
2**n;NÀiteks, 2 << 3 = 16 on vÔrdne vÀljendiga 2 ** 4 = 16.
Float tÀisarvuks
OPERAATSIOONID / TĂŒĂŒpide MUUTMINE
Kui on vajalik muundada float tÀisarvuks, saab kasutada Math.floor(), Math.ceil() vÔi Math.round(). Kuid on ka kiirem viis, kasutades |, st OR operaatorit.
console.log(23.9 | 0); // Tulem: 23
console.log(-23.9 | 0); // Tulem: -23KÀitumine sÔltub suures osas sellest, kas tegelete positiivsete vÔi negatiivsete arvudega, seega sobib see meetod ainult siis, kui olete kindel, mida teete.
n | 0 eemaldab kÔik, mis tuleb pÀrast koma, kÀrpides ujuva koma arvu tÀisarvuks.
Sama ĂŒmmardamise efekti saate saavutada, kasutades ~~. PĂ€rast sunnitud teisendamist tĂ€isarvuks jÀÀb vÀÀrtus muutumatuks.
Kustutame sulguvad numbrid
OR operaatorit saab kasutada, et eemaldada numbrist mis tahes arv numbreid. See tĂ€hendab, et me ei pea tĂŒĂŒpe teisendama, nagu siin:
let str = "1553";
Number(str.substring(0, str.length - 1));Selle asemel kirjutame lihtsalt:
console.log(1553 / 10 | 0) // Tulem: 155
console.log(1553 / 100 | 0) // Tulem: 15
console.log(1553 / 1000 | 0) // Tulem: 1Automaatne sidumine
KLASSID
ES6 noolemĂ€rgid saab kasutada klassi meetodites, ja see toob kaasa sidumise. See vĂ”imaldab teil hĂŒvasti jĂ€tta korduvate vĂ€ljenditega, nagu this.myMethod = this.myMethod.bind(this)!
import React, { Component } from React;
export default class App extends Component {
constructor(props) {
super(props);
this.state = {};
}
myMethod = () => {
// See, this method is bound implicitly!
}
render() {
return (
<>
<div>
{this.myMethod()}
</div>
</>
)
}
};Massiivi kÀrpimine
MASSED
Kui peate massiivist vÀÀrtusi eemaldama, on olemas kiiremaid meetodeid kui splice().
NÀiteks, kui teate algse massiivi suurust, saate mÀÀrata selle properties length jÀrgmiselt:
let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
array.length = 4;
console.log(array); // Tulemus: [0, 1, 2, 3]Kuid on veel ĂŒks meetod, mis on isegi kiirem. Kui kiirus on teile oluline, siis siin on meie valik:
let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
array = array.slice(0, 4);
console.log(array); // Tulemus: [0, 1, 2, 3]Viimase massiivi vÀÀrtuse (vÀÀrtuste) vÀljastamine
MASSED
See tehnika nÔuab slice() meetodi kasutamist.
let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
console.log(array.slice(-1)); // Tulemus: [9]
console.log(array.slice(-2)); // Tulemus: [8, 9]
console.log(array.slice(-3)); // Tulemus: [7, 8, 9]JSON-koodi vormindamine
JSON
VÔib-olla olete juba kasutanud JSON.stringify. Kas teadsite, et see aitab teie JSON-i vormindamisel?
Stringify() meetod vÔtab vastu kaks valikulist parameetrit: funktsiooni replacer, mida saab kasutada kuvatava JSON-i filterdamiseks, ja vÀÀrtuse space.
console.log(JSON.stringify({ alpha: 'A', beta: 'B' }, null, 't'));
// Tulemus:
// '{
// "alpha": A,
// "beta": B
// }'Ja kÔik, loodan, et kÔik antud tehnikad olid kasulikud. Milliseid nippe te teate? Kirjutage need kommentaaridesse.
Skillbox soovitab:
- Kaheaastane praktiline kursus .
- Veebikursus .
- Praktiline aastakursus .
Allikas: habr.com
