
Kui ma JavaScripti Ôppimist alustasin, koostasin ma kÔigepealt loendi nippidest, mis aitasid mul aega sÀÀsta. TÔin need vÀlja teiste programmeerijate kÀest, erinevatelt veebisaitidelt ja kÀsiraamatutest.
Selles artiklis tutvustan ma 12 suurepÀrast viisi oma JavaScripti koodi parandamiseks ja kiirendamiseks. Enamasti on need universaalsed.
Tuletame meelde: kĂ”igile «Habr» lugejatele â 10 000 rubla allahindlus igale Skillboxi kursusele, kasutades sooduskoodi «Habr».
Skillbox soovitab: Praktiline kursus .
Ainult unikaalsete vÀÀrtuste filtreerimine
MASSED
ES6-s tutvustatud Set objektitĂŒĂŒbi abil, koos âŠ, levitamisoperaatoriga, saame kasutada seda uue massiivi loomiseks, milles on vaid unikaalsed vÀÀrtused.
const array = [1, 1, 2, 3, 5, 5, 1]
const uniqueArray = [...new Set(array)];
console.log(uniqueArray); // Tulem: [1, 2, 3, 5]Tavalisel juhul oleks sama toimingu tÀitmiseks vajalik 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, funksioone vĂ”i lisamassiive, vajate teistsugust lĂ€henemist.
Massiivi pikkuse vahemĂ€lu tsĂŒklites
TSĂKLID
Kui Ă”pite for tsĂŒklite kohta, jĂ€rgite teie tavapĂ€rast protseduuri:
for (let i = 0; i < array.length; i++) {
console.log(i);
}Kuid sel juhul kontrollib for-tsĂŒkkel massiivi pikkust iga kord, kui see kĂ€ib.
MĂ”nikord vĂ”ib see olla kasulik, kuid enamasti on efektiivsem massiivi pikkuse vahemĂ€lu salvestamine, mis nĂ”uab ĂŒhe pĂ€ringu. Saame seda teha mÀÀrates pikkuse muutujaks, kus seame i muutuja, nĂ€iteks nii:
for (let i = 0, length = array.length; i < length; i++) {
console.log(i);
}PĂ”himĂ”tteliselt on see peaaegu sama nagu ĂŒlal, kuid tsĂŒkli suuruse suurenedes saame mĂ€rkimisvÀÀrset ajasÀÀstu.
LĂŒhikese tĂ”ukefulga hindamine (McCarthy hindamine)
TINGIMUSE OPERATORID
Kolmeline operaator on kiire ja tÔhus viis lihtsate (ja mÔnikord mitte nii lihtsate) tingimuslause kirjutamiseks:
x > 100 ? "suurem kui 100" : "vÀhem kui 100";
x > 100 ? (x > 200 ? "suurem kui 200" : "vahemikus 100-200") : "vÀhem kui 100";
Kuid mĂ”nikord on isegi kolmene operaator keerulisem, kui vaja. Selle asemel saame kasutada âjaâ && ja âvĂ”iâ || loogilisi operaatorid mĂ”ne vĂ€ljendi hindamiseks veel lĂŒhemal viisil. Seda nimetatakse sageli "lĂŒhikeseks tĂ”ukefulgaks" vĂ”i "lĂŒhidetuks hindamiseks".
Kuidas see töötab
Oletame, et tahame tagastada ainult ĂŒhe kahest vĂ”i enamast tingimusest.
Kasutamine && tagastab esimese false vÀÀrtuse. Kui iga operand hinnatakse true-ks, 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 true vÀÀrtuse. Kui iga operand hinnatakse false-ks, 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 muutuja pikkuse, kuid ei tea selle tĂŒĂŒpi.
Sellisel juhul vĂ”iksime kasutada if/else, et kontrollida, kas foo on sobiv tĂŒĂŒp, kuid see meetod vĂ”ib osutuda liiga pikkaks. SeetĂ”ttu on parem kasutada meie "lĂŒhiĂŒhendust".
return (foo || []).length;Kui muutuja foo omab sobivat pikkust, tagastatakse see. Vastasel juhul saame 0.
NĂ€ide 2
Kas olete kogenud raskusi sissekud objekte? Te ei pruugi teada, kas objekt vĂ”i ĂŒks tema alamomadustest eksisteerib, ja see vĂ”ib pĂ”hjustada probleeme.
NÀiteks tahtsime pÀÀseda this.state sees olevale data omadusele, kuid data ei ole mÀÀratletud, kuni meie programm ei tagasta pÀringut.
SÔltuvalt sellest, kus me seda kasutame, vÔib this.state.data kutsumine takistada rakenduse kÀivitamist. Probleemi lahendamiseks vÔiksime seda tingimusvÀljendisse panna:
if (this.state.data) {
return this.state.data;
} else {
return 'Andmete Saamine';
}Sobivam lahendus oleks kasutada 'vÔi' operaatorit.
return (this.state.data || 'Andmete Saamine');Me ei saa ĂŒlaltoodud koodi muuta, et kasutada &&. Operaator 'Andmete Saamine' && this.state.data tagastab this.state.data sĂ”ltumata sellest, kas see on mÀÀramatud vĂ”i mitte.
Valikuline ahel
Saame kaaluda valikulise ahela kasutamist, kui proovime tagastada omadust sĂŒgaval puustruktuuris. Seega saab kĂŒsimĂ€rk? kasutada omaduse vĂ€ljavĂ”tmiseks, ainult kui see ei ole null.
NĂ€iteks vĂ”iksime ĂŒlaltoodud nĂ€ite refaktoreerida, 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ÀÀratud vÔi mitte, vÔiksime tagastada this.state?.data.
TĂŒĂŒpide Muundamine
TĂĂPIDE MUUNDAMINE
Lisaks tavalistele loogilistele funktsioonidele true ja false, peetakse JavaScriptis ka kÔiki teisi vÀÀrtusi truthy vÔi falsy.
Kuni teisiti ei ole mĂ€rgitud, on kĂ”ik JavaScripti vÀÀrtused tĂ”ele vastavad, vĂ€lja arvatud 0, ââ, null, mÀÀratlemata, NaN ja loomulikult false. Viimased on valevÀÀrtused.
Saame lihtsalt vahetada nende vahel, kasutades operaatorit !, mis muudab tĂŒĂŒbi ka loogiliseks.
const isTrue = !0;
const isFalse = !1;
const alsoFalse = !!0;
console.log(true); // Tulemuseks: true
console.log(typeof true); // Tulemuseks: "boolean"Muundamine stringiks
TĂĂPIDE MUUNDAMINE
Kiiret tÀisarvu muundamist stringiks saab teha jÀrgmiselt.
const val = 1 + "";
console.log(val); // Tulemuseks: "1"
console.log(typeof val); // Tulemuseks: "string"Muundamine tÀisarvuks
TĂĂPIDE MUUNDAMINE
Tagasimuundamine toimub nii.
let int = "15";
int = +int;
console.log(int); // Tulemuseks: 15
console.log(typeof int); // Tulemuseks: "number"Seda meetodit saab kasutada ka boolean tĂŒĂŒpi andmete muundamiseks tavaliseks arvuks, nagu allpool nĂ€idatud:
console.log(+true); // Tulemuseks: 1
console.log(+false); // Tulemuseks: 0VÔivad olla olukorrad, kus + tÔlgendatakse kui konkateneerimise operaatorit, mitte liitmist. Selle vÀltimiseks tasub kasutada tilde: ~~. See operaator on ekvivalentne vÀljendiga -n-1. NÀiteks, ~ 15 on -16.
Kaks jĂ€rjestikust tilde tĂŒhistavad toimingu, sest â (- â n â 1) â 1 = n + 1 â 1 = n. TeisisĂ”nu, ~ -16 on 15.
const int = ~~"15"
console.log(int); // Tulemuseks: 15
console.log(typeof int); // Tulemuseks: "number"<Quick Powers
OPERATSIOONS
Alates ES7-st saab kasutada astendamise operaatorit ** kui lĂŒhendit astmete jaoks. See on palju kiirem kui Math.pow (2, 3) kasutamine. Tundub lihtne, kuid see punkt on loetelu trikkides, kuna see ei ole alati mainitud.
console.log(2 ** 3); // Tulemuseks: 8Ărge segage seda sĂŒmboliga ^, mida tavaliselt kasutatakse astendamiseks. Kuid JavaScriptis on see operaator XOR.
Enne ES7 lĂŒhendit ** sai kasutada ainult astmete jaoks, mille aluseks oli 2, kasutades bititasemel vasakpoolset nihutamist <<:
Math.pow(2, n);
2 << (n - 1);
2**n;NÀiteks, 2 << 3 = 16 on ekvivalentne vÀljendile 2 ** 4 = 16.
Float tÀisarvuks
OPERATSIOONS / TĂĂPIDE MUUNDAMINE
Kui on vaja muundada float tÀisarvuks, saab kasutada Math.floor(), Math.ceil() vÔi Math.round(). Kuid on ka kiirem viis, kasutades |, ehk OR operaatorit.
console.log(23.9 | 0); // Tulemuseks: 23
console.log(-23.9 | 0); // Tulemuseks: -23KÀitumine sÔltub enamikul juhtudel 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 kĂŒmnendkomma, muutes ujuva koma arvu tĂ€isarvuks.
Sama tulemuse ringmiseks saate kasutada ~~. PÀrast sundmuundamist tÀisarvuks jÀÀb vÀÀrtus muutumatuks.
Eemaldame lÔpparvud
OR operaatorit saab kasutada, et eemaldada mistahes arv numbreid. See tĂ€hendab, et me ei pea tĂŒĂŒpe ĂŒmber 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 nooldeklareerimist saab kasutada klassi meetodites ja see eeldab sidumist. TĂ€nu sellele saame 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 meetod se on automaatselt seotud!
}
render() {
return (
<>
<div>
{this.myMethod()}
</div>
</>
)
}
};Massiivi lÔikamine
MASSED
Kui peate massiivist vÀÀrtusi eemaldama, on olemas kiiremaid meetodeid kui splice().
NĂ€iteks, kui teate originaalmassiivi suurust, saate ĂŒmber mÀÀrata selle pikkuse omaduse jĂ€rgmise koodiga:
let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
array.length = 4;
console.log(array); // Tulem: [0, 1, 2, 3]Kuid on olemas veel ĂŒks meetod, mis on isegi kiirem. Kui kiirus on teile oluline, on meie valik jĂ€rgmine:
let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
array = array.slice(0, 4);
console.log(array); // Tulem: [0, 1, 2, 3]Viimase (viimaste) massiivi vÀÀrtuste prindik
MASSED
See trikk nÔuab slice() meetodi kasutamist.
let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
console.log(array.slice(-1)); // Tulem: [9]
console.log(array.slice(-2)); // Tulem: [8, 9]
console.log(array.slice(-3)); // Tulem: [7, 8, 9]JSON-koodi vormindamine
JSON
VÔib-olla olete juba kasutanud JSON.stringify. Kas teate, et see aitab vormindada teie JSONi?
Stringify() meetod vÔtab kaks valikulist parameetrit: replacer funktsiooni, mida saab kasutada kuvatava JSONi filtreerimiseks, ja space vÀÀrtuse.
console.log(JSON.stringify({ alpha: 'A', beta: 'B' }, null, 't'));
// Tulem:
// '{
// "alpha": A,
// "beta": B
// }'Ja kÔik, loodan, et kÔik mainitud nipid on olnud kasulikud. Milliseid trikke tead sina? Kirjuta need kommentaaridesse.
Skillbox soovitab:
- Kaks aastat praktilist kursust .
- Veebikursus .
- Praktiline aastakursus .
Allikas: habr.com
