12 JavaScript trikova koje većina tutorijala nedostaje
Kada sam počeo da učim JavaScript, prvo što sam uradio je da napravim listu trikova koji su mi pomogli da uštedim vreme. Uočio sam ih kod drugih programera, na različitim stranicama i u priručnicima.
U ovom članku ću vam pokazati 12 sjajnih načina da poboljšate i ubrzate svoj JavaScript kod. U većini slučajeva oni su univerzalni.
Podsećamo:za sve čitaoce "Habra" - popust od 10 rubalja pri upisu na bilo koji Skillbox kurs koristeći "Habr" promotivni kod.
Tip objekta Set uveden je u ES6, zajedno sa..., operatorom širenja, možemo ga koristiti za kreiranje novog niza koji sadrži samo jedinstvene vrijednosti.
U normalnoj situaciji, potrebno je mnogo više koda za izvođenje iste operacije.
Ova tehnika radi za nizove koji sadrže primitivne tipove: undefined, null, boolean, string i number. Ako radite s nizom koji sadrži objekte, funkcije ili dodatne nizove, trebat će vam drugačiji pristup.
Dužina cache niza u ciklusima
CIKLUSI
Kada naučite for petlje, slijedite standardnu proceduru:
for (let i = 0; i < array.length; i++){
console.log(i);
}
Međutim, s ovom sintaksom, for petlja više puta provjerava dužinu niza svake iteracije.
Ponekad ovo može biti korisno, ali u većini slučajeva je efikasnije keširati dužinu niza, što će zahtijevati jedan pristup njemu. To možemo učiniti definiranjem varijable dužine gdje definiramo varijablu i, ovako:
for (let i = 0, length = array.length; i < length; i++){
console.log(i);
}
U principu, skoro isto kao gore, ali povećanjem veličine petlje dobićemo značajnu uštedu vremena.
Ocjena kratkog spoja (McCarthyjeva ocjena)
CONDITIONAL OPERATORS
Ternarni operator je brz i efikasan način za pisanje jednostavnih (a ponekad i ne tako jednostavnih) uslovnih izjava:
x> 100? “više od 100”: “manje od 100”;
x> 100? (x>200? "više od 200": "između 100-200"): "manje od 100";
Ali ponekad je čak i ternarni operator složeniji nego što je potrebno. Možemo koristiti 'i' && i 'ili' umjesto || Logički operatori za procjenu određenih izraza na još sažetiji način. Često se naziva "kratki spoj" ili "kratki spoj".
Kako ovo radi
Recimo da želimo da vratimo samo jedan od dva ili više uslova.
Upotreba && će vratiti prvu lažnu vrijednost. Ako svaki operand ima vrijednost true, tada će biti vraćen posljednji procijenjeni izraz.
let one = 1, two = 2, three = 3;
console.log(one && two && three); // Result: 3
console.log(0 && null); // Result: 0
Korištenje || će vratiti prvu istinitu vrijednost. Ako svaki operand procijeni na false, tada će biti vraćena posljednja procijenjena vrijednost.
let one = 1, two = 2, three = 3;
console.log(one || two || three); // Result: 1
console.log(0 || null); // Result: null
primjer 1
Recimo da želimo da vratimo dužinu varijable, ali ne znamo njen tip.
U ovom slučaju, možete koristiti if/else da provjerite da li je foo pravi tip, ali ova metoda može biti predugačka. Stoga je bolje uzeti naš “kratki spoj”.
return (foo || []).length;
Ako varijabla foo ima odgovarajuću dužinu, to će biti vraćeno. Inače ćemo dobiti 0.
primjer 2
Jeste li imali problema s pristupom ugniježđenom objektu? Možda ne znate postoji li objekat ili jedno od njegovih podsvojstava, a to može dovesti do problema.
Na primjer, željeli smo pristupiti svojstvu podataka u this.state, ali podaci nisu definirani sve dok naš program ne vrati zahtjev za preuzimanje.
Ovisno o tome gdje ga koristimo, pozivanje this.state.data može spriječiti pokretanje aplikacije. Da riješimo problem, mogli bismo ovo umotati u uslovni izraz:
Ne možemo promijeniti gornji kod da koristi &&. Operator 'Dohvaćanje podataka' && this.state.data će vratiti this.state.data bez obzira da li je nedefinisan ili ne.
Opcioni lanac
Moglo bi se predložiti korištenje opcionog ulančavanja kada pokušavate vratiti svojstvo duboko u strukturu stabla. Dakle, simbol znaka pitanja? može se koristiti za dohvaćanje svojstva samo ako nije null.
Na primjer, mogli bismo refaktorirati gornji primjer da dobijemo this.state.data?..(). To jest, podaci se vraćaju samo ako vrijednost nije null.
Ili, ako je bitno da li je stanje definisano ili ne, možemo vratiti this.state?.data.
Pretvori u Boolean
KONVERZIJA TIPA
Osim normalnih logičkih funkcija true i false, JavaScript također tretira sve druge vrijednosti kao istinite ili netačne.
Dok nije drugačije navedeno, sve vrijednosti u JavaScript-u su istinite, osim 0, "", null, nedefinirano, NaN i, naravno, lažno. Potonji su lažni.
Lako se možemo prebacivati između njih pomoću operatora !, koji takođe pretvara tip u boolean.
Mogu postojati situacije u kojima će se + tumačiti kao operator konkatenacije, a ne kao operator sabiranja. Da biste to izbjegli, trebali biste koristiti tilde: ~~. Ovaj operator je ekvivalentan -n-1. Na primjer, ~15 je jednako -16.
Korištenje dvije tilde u nizu negira operaciju jer - (- - n - 1) - 1 = n + 1 - 1 = n. Drugim riječima, ~-16 je jednako 15.
Počevši od ES7, možete koristiti eksponencijalni operator ** kao skraćenicu za stepene. Ovo je mnogo brže od upotrebe Math.pow(2, 3). Čini se jednostavno, ali ova točka je uključena u listu tehnika, jer se ne spominje svugdje.
console.log(2 ** 3); // Result: 8
Ne treba ga brkati sa simbolom ^, koji se obično koristi za eksponencijaciju. Ali u JavaScript-u ovo je XOR operator.
Prije ES7, ** prečica se mogla koristiti samo za snage baze 2 koristeći operator pomaka po bitu ulijevo <<:
Math.pow(2, n);
2 << (n - 1);
2**n;
Na primjer, 2 << 3 = 16 je ekvivalentno 2 ** 4 = 16.
Float na cijeli broj
OPERACIJE / KONVERZIJA TIPA
Ako trebate pretvoriti float u cijeli broj, možete koristiti Math.floor(), Math.ceil() ili Math.round(). Ali postoji brži način, za to koristimo |, odnosno operator OR.
Ponašanje | uvelike ovisi da li imate posla s pozitivnim ili negativnim brojevima, tako da je ova metoda prikladna samo ako ste sigurni u ono što radite.
n | 0 uklanja sve iza decimalnog separatora, skraćujući float na cijeli broj.
Možete dobiti isti efekat zaokruživanja koristeći ~~. Nakon prisilne konverzije u cijeli broj, vrijednost ostaje nepromijenjena.
Uklanjanje završnih brojeva
Operator OR se može koristiti za uklanjanje bilo kojeg broja cifara iz broja. To znači da ne moramo pretvarati tipove kao što je ovdje:
let str = "1553";
Number(str.substring(0, str.length - 1));
ES6 oznake strelica se mogu koristiti u metodama klasa, a vezivanje se podrazumijeva. To znači da se možete oprostiti od izraza koji se ponavljaju kao što je this.myMethod = this.myMethod.bind(this)!