12 JavaScript Tricks dy't de measte tutorials misse
Doe't ik JavaScript begon te learen, wie it earste wat ik die in list meitsje mei trúkjes dy't my holpen tiid te besparjen. Ik seach se fan oare programmeurs, op ferskate siden en yn hantliedingen.
Yn dit artikel sil ik jo 12 geweldige manieren sjen litte om jo JavaScript-koade te ferbetterjen en te fersnellen. Yn 'e measte gefallen binne se universele.
Wy herinnerje:foar alle lêzers fan "Habr" - in koarting fan 10 roebel by it ynskriuwen fan in Skillbox-kursus mei de promoasjekoade "Habr".
It objekttype Set waard yntrodusearre yn ES6, tegearre mei de ..., spriedingsoperator, kinne wy it brûke om in nije array te meitsjen dy't allinich unike wearden befettet.
Yn in normale situaasje is folle mear koade nedich om deselde operaasje út te fieren.
Dizze technyk wurket foar arrays dy't primitive typen befetsje: undefined, null, boolean, string en nûmer. As jo wurkje mei in array dy't objekten, funksjes of ekstra arrays befettet, hawwe jo in oare oanpak nedich.
Lengte fan cache-array yn syklusen
CYCLES
As jo leare foar loops, folgje jo de standertproseduere:
for (let i = 0; i < array.length; i++){
console.log(i);
}
Mei dizze syntaksis kontroleart de for-loop lykwols de lingte fan 'e array by elke iteraasje.
Soms kin dit nuttich wêze, mar yn 'e measte gefallen is it effisjinter om de lingte fan' e array te cache, wat ien tagong ta it nedich is. Wy kinne dit dwaan troch in lingte fariabele te definiearjen wêr't wy de fariabele i definiearje, lykas dit:
for (let i = 0, length = array.length; i < length; i++){
console.log(i);
}
Yn prinsipe hast itselde as hjirboppe, mar troch it fergrutsjen fan de loopgrutte sille wy signifikante tiidbesparring krije.
Kortslutingswurdearring (McCarthy-wurdearring)
CONDITIONAL OPERATORS
De ternêre operator is in flugge en effisjinte manier om ienfâldige (en soms net sa ienfâldich) betingsten te skriuwen:
x> 100? "mear as 100": "minder as 100";
x> 100? (x>200? "mear as 200": "tusken 100-200": "minder dan 100";
Mar soms sels de ternêre operator is komplisearre as nedich. Wy kinne 'en' && en 'of' ynstee brûke || Booleaanske operators om bepaalde útdrukkingen op in noch koartere manier te evaluearjen. It wurdt faaks "koartsluting" of "koartslutingswurdearring" neamd.
Hoe docht dit wurk
Litte wy sizze dat wy mar ien fan twa of mear betingsten wolle weromjaan.
It brûken fan && sil de earste falske wearde weromjaan. As elke operand evaluearret nei wier, dan sil de lêste evaluearre ekspresje weromjûn wurde.
let one = 1, two = 2, three = 3;
console.log(one && two && three); // Result: 3
console.log(0 && null); // Result: 0
Mei || sil weromkomme de earste wiere wearde. As elke operand evaluearret as falsk, dan sil de lêste evaluearre wearde weromjûn wurde.
let one = 1, two = 2, three = 3;
console.log(one || two || three); // Result: 1
console.log(0 || null); // Result: null
foarbyld 1
Litte wy sizze dat wy de lingte fan in fariabele wolle weromjaan, mar wy witte it type net.
Yn dit gefal kinne jo as / oars brûke om te kontrolearjen dat foo it goede type is, mar dizze metoade kin te lang wêze. Dêrom is it better om ús "koartsluting" te nimmen.
return (foo || []).length;
As de fariabele foo in gaadlike lingte hat, dan komt dat werom. Oars krije wy 0.
foarbyld 2
Hawwe jo problemen mei tagong ta in nested objekt? Jo kinne net witte oft in foarwerp of ien fan syn subeigenskippen bestiet, en dit kin liede ta problemen.
Bygelyks, wy woenen tagong ta de gegevens eigendom yn this.state, mar gegevens binne net definiearre oant ús programma jout in opheljen fersyk.
Ofhinklik fan wêr't wy it brûke, kin it oproppen fan this.state.data foarkomme dat de applikaasje begjint. Om it probleem op te lossen, kinne wy dit yn in betingste útdrukking ynpakke:
In bettere opsje soe wêze om de "of" operator te brûken.
return (this.state.data || 'Fetching Data');
Wy kinne de koade hjirboppe net feroarje om && te brûken. De 'Fetching Data' && this.state.data-operator sil this.state.data weromjaan, nettsjinsteande oft it net definiearre is of net.
Opsjonele ketting
Men kin foarstelle om opsjonele ketting te brûken as jo besykje in pân djip yn in beamstruktuer werom te jaan. Dus, it fraachteken symboal? kin allinich brûkt wurde om in pân werom te heljen as it net nul is.
Wy kinne bygelyks it foarbyld hjirboppe refaktorearje om this.state.data?..() te krijen. Dat is, gegevens wurde allinich weromjûn as de wearde net nul is.
Of, as it fan belang is oft steat is definiearre of net, wy koenen werom this.state?.data.
Konvertearje nei Boolean
TYPE KONVERTERING
Neist de normale Booleaanske funksjes wier en falsk, behannelet JavaScript ek alle oare wearden as wier of falsk.
Oant oars oanjûn, binne alle wearden yn JavaScript wier, útsein 0, "", null, undefined, NaN en, fansels, falsk. De lêsten binne falsk.
Wy kinne maklik tusken de twa wikselje mei de operator !, dy't it type ek konvertearret nei Booleaansk.
D'r kinne situaasjes wêze wêr't + ynterpretearre wurde sil as in gearhingoperator ynstee fan in tafoegingsoperator. Om dit te foarkommen, moatte jo tildes brûke: ~~. Dizze operator is lykweardich oan -n-1. Bygelyks, ~15 is lyk oan -16.
It brûken fan twa tildes op in rige negearret de operaasje omdat - (- - n - 1) - 1 = n + 1 - 1 = n. Mei oare wurden, ~-16 is lyk oan 15.
Begjinnend yn ES7, kinne jo de eksponentiaasjeoperator ** brûke as in koarting foar machten. Dit is folle flugger as it brûken fan Math.pow(2, 3). It liket ienfâldich, mar dit punt is opnommen yn 'e list fan techniken, om't it net oeral neamd wurdt.
console.log(2 ** 3); // Result: 8
It moat net betize wurde mei it symboal ^, dat ornaris brûkt wurdt foar eksponentiaasje. Mar yn JavaScript is dit de XOR-operator.
Foar ES7 koe de ** fluchtoets allinich brûkt wurde foar krêften fan basis 2 mei de bitwize loftsskiftoperator <<:
Math.pow(2, n);
2 << (n - 1);
2**n;
Bygelyks, 2 << 3 = 16 is lykweardich oan 2 ** 4 = 16.
Float nei in hiel getal
OPERASJIES / TYPE CONVERSION
As jo moatte omsette in float nei in hiel getal, kinne jo brûke Math.floor (), Math.ceil () of Math.round (). Mar d'r is in fluggere manier, hjirfoar brûke wy |, dat is de OR-operator.
Gedrach | hinget foar in grut part op oft jo te krijen hawwe mei positive of negative getallen, dus dizze metoade is allinnich geskikt as jo binne wis op wat jo dogge.
n | 0 ferwideret alles nei de desimale skieding, en truncate de float nei in hiel getal.
Jo kinne itselde rûningseffekt krije mei ~~. Nei twongen konverzje nei in hiel getal, bliuwt de wearde net feroare.
Fuortsmite trailing nûmers
De OR-operator kin brûkt wurde om elk oantal sifers fan in nûmer te ferwiderjen. Dit betsjut dat wy gjin typen hoege te konvertearjen lykas hjir:
let str = "1553";
Number(str.substring(0, str.length - 1));
ES6-pylknotaasjes kinne brûkt wurde yn klassemetoaden, en bining wurdt ymplisearre. Dit betsjut dat jo ôfskie kinne nimme fan repetitive útdrukkingen lykas this.myMethod = this.myMethod.bind(this)!