12 JavaScripti töövÔtet, mida enamikus Ôpetustes ei ole

12 JavaScripti töövÔtet, mida enamikus Ôpetustes ei ole

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 «Mobiilne arendaja PRO».

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: 0

Kasutamine || 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: null

NĂ€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: 0

VÔ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: -23

KÀ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: 1

Automaatne 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 = () =&gt; {
    // 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:

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster