12 JavaScript triki, kurus izlaiž lielākā daļa apmācību

12 JavaScript triki, kurus izlaiž lielākā daļa apmācību

Kad sāku mācīties JavaScript, pirmais, ko izdarīju, bija sarakstu ar trikiem, kas man palīdzēja ietaupīt laiku. Es tos pamanīju no citiem programmētājiem, dažādās vietnēs un rokasgrāmatās.

Šajā rakstā es jums parādīŔu 12 lieliskus veidus, kā uzlabot un paātrināt JavaScript kodu. Vairumā gadījumu tie ir universāli.

Atgādinām: visiem "Habr" lasītājiem - atlaide 10 000 rubļu, reģistrējoties jebkurā Skillbox kursā, izmantojot "Habr" reklāmas kodu.

Skillbox iesaka: Praktiskais kurss "Mobile Developer PRO".

Unikālo vērtÄ«bu filtrÄ“Å”ana

MASÄŖVI

Objekta tips Set tika ieviests ES6 kopā ar..., izplatības operatoru, mēs varam to izmantot, lai izveidotu jaunu masīvu, kurā ir tikai unikālas vērtības.

const array = [1, 1, 2, 3, 5, 5, 1]
const uniqueArray = [...new Set(array)];
 
console.log(uniqueArray); // Result: [1, 2, 3, 5]

Parastā situācijā vienas un tās paŔas darbības veikŔanai ir nepiecieŔams daudz vairāk koda.

Å is paņēmiens darbojas masÄ«viem, kas satur primitÄ«vus tipus: nenoteikts, nulles, BÅ«la, virknes un numuru. Ja strādājat ar masÄ«vu, kurā ir objekti, funkcijas vai papildu masÄ«vi, jums bÅ«s nepiecieÅ”ama cita pieeja.

KeÅ”atmiņas masÄ«va garums ciklos

CIKLI

Apgūstot cilpas, jums jāievēro standarta procedūra:

for (let i = 0; i < array.length; i++){
  console.log(i);
}

Tomēr, izmantojot Å”o sintaksi, cilpa for atkārtoti pārbauda masÄ«va garumu katrā iterācijā.

Dažreiz tas var bÅ«t noderÄ«gi, taču vairumā gadÄ«jumu efektÄ«vāk ir saglabāt masÄ«va garumu keÅ”atmiņā, kas prasÄ«s vienu piekļuvi. Mēs to varam izdarÄ«t, definējot garuma mainÄ«go, kur mēs definējam mainÄ«go i, piemēram:

for (let i = 0, length = array.length; i < length; i++){
  console.log(i);
}

Principā gandrÄ«z tāds pats kā iepriekÅ”, bet, palielinot cilpas izmēru, mēs iegÅ«sim ievērojamu laika ietaupÄ«jumu.

ÄŖssavienojuma vērtējums (McCarthy reitings)

NOSACÄŖJUMI OPERATORI

TrÄ«skārÅ”ais operators ir ātrs un efektÄ«vs veids, kā rakstÄ«t vienkārÅ”us (un dažreiz ne tik vienkārÅ”us) nosacÄ«jumu paziņojumus:

x> 100? ā€œvairāk nekā 100ā€: ā€œmazāk par 100ā€;
x> 100? (x>200? "vairāk nekā 200": "starp 100-200"): "mazāk nekā 100";

Bet dažreiz pat trÄ«skārÅ”ais operators ir sarežģītāks nekā nepiecieÅ”ams. Mēs varam izmantot "un" && un "or" vietā || BÅ«la operatori, lai vēl kodolÄ«gāk novērtētu noteiktas izteiksmes. To bieži sauc par "Ä«ssavienojumu" vai "Ä«ssavienojuma reitingu".

Kā tas darbojas

Pieņemsim, ka vēlamies atgriezt tikai vienu no diviem vai vairākiem nosacījumiem.

Izmantojot &&, tiks atgriezta pirmā nepatiesā vērtība. Ja katra operanda vērtība ir patiesa, tiks atgriezta pēdējā novērtētā izteiksme.

let one = 1, two = 2, three = 3;
console.log(one && two && three); // Result: 3
 
console.log(0 && null); // Result: 0

Izmantojot || atgriezīs pirmo patieso vērtību. Ja katra operanda vērtība ir nepatiesa, tiks atgriezta pēdējā novērtētā vērtība.

let one = 1, two = 2, three = 3;
console.log(one || two || three); // Result: 1
 
console.log(0 || null); // Result: null

piemērs 1

Pieņemsim, ka mēs vēlamies atgriezt mainīgā lieluma garumu, bet nezinām tā veidu.

Å ajā gadÄ«jumā varat izmantot if/else, lai pārbaudÄ«tu, vai foo ir pareizais veids, taču Ŕī metode var bÅ«t pārāk gara. Tāpēc labāk ir izmantot mÅ«su ā€œÄ«ssavienojumuā€.

return (foo || []).length;

Ja mainīgajam foo ir piemērots garums, tas tiks atgriezts. Pretējā gadījumā mēs iegūsim 0.

piemērs 2

Vai jums ir bijuÅ”as problēmas ar piekļuvi ligzdotam objektam? JÅ«s varat nezināt, vai objekts vai kāds no tā apakŔīpaÅ”umiem pastāv, un tas var radÄ«t problēmas.

Piemēram, mēs vēlējāmies piekļūt datu rekvizÄ«tam statusā this.state, taču dati nav definēti, kamēr mÅ«su programma neatgriež izgÅ«Å”anas pieprasÄ«jumu.

AtkarÄ«bā no tā, kur mēs to izmantojam, Ŕī.state.data izsaukÅ”ana var neļaut lietojumprogrammai startēt. Lai atrisinātu problēmu, mēs to varētu ietÄ«t nosacÄ«juma izteiksmē:

if (this.state.data) {
  return this.state.data;
} else {
  return 'Fetching Data';
}

Labāks risinājums būtu izmantot operatoru "vai".

return (this.state.data || 'Fetching Data');

Mēs nevaram mainÄ«t iepriekÅ” minēto kodu, lai izmantotu &&. Operators ā€œDatu ieneÅ”anaā€ && this.state.data atgriezÄ«s this.state.data neatkarÄ«gi no tā, vai tie ir nedefinēti.

Pēc izvēles ķēde

Mēģinot atgriezt Ä«paÅ”umu dziļi koka struktÅ«rā, varētu ieteikt izmantot neobligātu ķēdi. Tātad jautājuma zÄ«mes simbols? var izmantot, lai izgÅ«tu Ä«paÅ”umu tikai tad, ja tas nav nulle.

Piemēram, mēs varētu pārveidot iepriekÅ” minēto piemēru, lai iegÅ«tu this.state.data?..(). Tas ir, dati tiek atgriezti tikai tad, ja vērtÄ«ba nav nulle.

Vai arī, ja ir svarīgi, vai stāvoklis ir definēts vai nē, mēs varētu atgriezt this.state?.data.

Konvertēt uz Būla

TIPA PĀRVĒRŠANA

Papildus parastajām Būla funkcijām patiesa un nepatiesa, JavaScript arī visas pārējās vērtības uzskata par patiesām vai nepatiesām.

Kamēr nav norādīts citādi, visas JavaScript vērtības ir patiesas, izņemot 0, "", nulles, undefined, NaN un, protams, false. Pēdējie ir viltoti.

Mēs varam viegli pārslēgties starp abiem, izmantojot operatoru !, kas arī pārveido veidu par Būla vērtību.

const isTrue  = !0;
const isFalse = !1;
const alsoFalse = !!0;
 
console.log(true); // Result: true
console.log(typeof true); // Result: "boolean"

Pārvērst par virkni

TIPA PĀRVĒRŠANA

Ātru pārvērÅ”anu no vesela skaitļa uz virkni var veikt Ŕādi.

const val = 1 + "";
 
console.log(val); // Result: "1"
console.log(typeof val); // Result: "string"

Konvertēt uz veselu skaitli

TIPA PĀRVĒRŠANA

Mēs veicam apgriezto transformāciju Ŕādi.

let int = "15";
int = +int;
 
console.log(int); // Result: 15
console.log(typeof int); Result: "number"

Šo metodi var izmantot arī, lai pārveidotu Būla datu tipu parastās skaitliskās vērtībās, kā parādīts tālāk:

console.log(+true);  // Return: 1
console.log(+false); // Return: 0

Var bÅ«t situācijas, kad + tiks interpretēts kā savienoÅ”anas operators, nevis pievienoÅ”anas operators. Lai no tā izvairÄ«tos, jums vajadzētu izmantot tildes: ~~. Å is operators ir lÄ«dzvērtÄ«gs -n-1. Piemēram, ~15 ir vienāds ar -16.

Izmantojot divas tildes pēc kārtas, darbība tiek noliegta, jo - (- - n - 1) - 1 = n + 1 - 1 = n. Citiem vārdiem sakot, ~-16 ir vienāds ar 15.

const int = ~~"15"
console.log(int); // Result: 15
console.log(typeof int); Result: "number"

<Quick Powers

OPERĀCIJAS

Sākot ar ES7, jÅ«s varat izmantot kāpināŔanas operatoru ** kā pilnvaru saÄ«sinājumu. Tas ir daudz ātrāk nekā izmantojot Math.pow(2, 3). Å Ä·iet vienkārÅ”i, bet Å”is punkts ir iekļauts paņēmienu sarakstā, jo tas nav minēts visur.

console.log(2 ** 3); // Result: 8

To nevajadzētu sajaukt ar simbolu ^, ko parasti izmanto kāpināŔanai. Bet JavaScript tas ir XOR operators.

Pirms ES7 saīsni ** varēja izmantot tikai 2. bāzes pakāpēm, izmantojot bitu pa kreisi nobīdes operatoru <<:

Math.pow(2, n);
2 << (n - 1);
2**n;

Piemēram, 2 << 3 = 16 ir ekvivalents 2** 4 = 16.

Peldēt līdz veselam skaitlim

OPERĀCIJAS / TIPA PĀRVĒRŠANA

Ja jums ir jāpārvērÅ” pludiņŔ par veselu skaitli, varat izmantot Math.floor(), Math.ceil() vai Math.round(). Bet ir ātrāks veids, Å”im nolÅ«kam mēs izmantojam |, tas ir, operatoru VAI.

console.log(23.9 | 0);  // Result: 23
console.log(-23.9 | 0); // Result: -23

UzvedÄ«ba | lielā mērā ir atkarÄ«gs no tā, vai jums ir darÄ«Å”ana ar pozitÄ«viem vai negatÄ«viem skaitļiem, tāpēc Ŕī metode ir piemērota tikai tad, ja esat pārliecināts par to, ko darāt.

n | 0 noņem visu pēc decimāldaļas atdalītāja, saīsinot pludiņu līdz veselam skaitlim.

JÅ«s varat iegÅ«t tādu paÅ”u noapaļoÅ”anas efektu, izmantojot ~~. Pēc piespiedu konvertÄ“Å”anas uz veselu skaitli vērtÄ«ba paliek nemainÄ«ga.

Beigu skaitļu noņemÅ”ana

Operatoru VAI var izmantot, lai no skaitļa noņemtu jebkuru ciparu skaitu. Tas nozÄ«mē, ka mums nav jāpārveido veidi, piemēram, Å”eit:

let str = "1553";
Number(str.substring(0, str.length - 1));

Tā vietā mēs vienkārÅ”i rakstām:

console.log(1553 / 10   | 0)  // Result: 155
console.log(1553 / 100  | 0)  // Result: 15
console.log(1553 / 1000 | 0)  // Result: 1

Automātiska saistīŔana

KLASES

ES6 bultiņu apzÄ«mējumus var izmantot klases metodēs, un tas nozÄ«mē saistÄ«Å”anu. Tas nozÄ«mē, ka varat atvadÄ«ties no tādām atkārtotām izteiksmēm kā this.myMethod = this.myMethod.bind(this)!

import React, { Component } from React;
 
export default class App extends Compononent {
  constructor(props) {
  super(props);
  this.state = {};
  }
 
myMethod = () => {
    // This method is bound implicitly!
  }
 
render() {
    return (
      <>
        <div>
          {this.myMethod()}
        </div>
      </>
    )
  }
};

Masīva apgrieŔana

MASÄŖVI

Ja jums ir jāizņem vērtības no masīva, ir ātrākas metodes nekā splice ().

Piemēram, ja zināt sākotnējā masÄ«va lielumu, varat ignorēt tā garuma rekvizÄ«tu Ŕādi:

let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
array.length = 4;
 
console.log(array); // Result: [0, 1, 2, 3]

Bet ir vēl viena metode un ātrāka. Ja jums ir svarÄ«gs ātrums, Å”eit ir mÅ«su izvēle:

let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
array = array.slice(0, 4);
 
console.log(array); // Result: [0, 1, 2, 3]

MasÄ«va pēdējās vērtÄ«bas(-u) drukāŔana

MASÄŖVI
Šim paņēmienam ir jāizmanto slice() metode.

let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
 
console.log(array.slice(-1)); // Result: [9]
console.log(array.slice(-2)); // Result: [8, 9]
console.log(array.slice(-3)); // Result: [7, 8, 9]

JSON koda formatēŔana

JSON

Iespējams, jūs jau esat izmantojis JSON.stringify. Vai zinājāt, ka tas palīdz formatēt jūsu JSON?

Stringify() metodei ir nepiecieÅ”ami divi izvēles parametri: aizstājēja funkcija, ko var izmantot, lai filtrētu parādÄ«to JSON, un atstarpes vērtÄ«ba.

console.log(JSON.stringify({ alpha: 'A', beta: 'B' }, null, 't'));
 
// Result:
// '{
//     "alpha": A,
//     "beta": B
// }'

Tas arī viss, es ceru, ka visas Ŕīs metodes bija noderīgas. Kādus trikus jūs zināt? Rakstiet tos komentāros.

Skillbox iesaka:

Avots: www.habr.com

Pievieno komentāru