12 JavaScript Tricks déi meescht Tutorials vermëssen
Wéi ech ugefaang JavaScript ze léieren, ass dat éischt wat ech gemaach hunn eng Lëscht vun Tricks ze maachen déi mir gehollef hunn Zäit ze spueren. Ech hunn se vun anere Programméierer gesinn, op verschiddene Siten an an Handbücher.
An dësem Artikel weisen ech Iech 12 super Weeër fir Äre JavaScript Code ze verbesseren an ze beschleunegen. Am meeschte Fäll si se universell.
Mir erënneren Iech:fir all Habr Lieser - eng Remise vun 10 Rubel wann Dir Iech an all Skillbox Cours aschreift mat dem Habr Promo Code.
De Set Objekttyp gouf am ES6 agefouert, zesumme mam ..., Verbreedungsoperateur, kënne mir et benotzen fir eng nei Array ze kreéieren déi nëmmen eenzegaarteg Wäerter enthält.
An enger normaler Situatioun ass vill méi Code gebraucht fir déiselwecht Operatioun auszeféieren.
Dës Technik funktionnéiert fir Arrays mat primitiven Typen: ondefinéiert, null, boolesch, String an Zuel. Wann Dir mat enger Array schafft, déi Objeten, Funktiounen oder zousätzlech Arrays enthält, braucht Dir eng aner Approche.
Längt vum Cache-Array an Zyklen
CYCLES
Wann Dir fir Loops léiert, befollegt Dir d'Standardprozedur:
for (let i = 0; i < array.length; i++){
console.log(i);
}
Wéi och ëmmer, mat dëser Syntax kontrolléiert de For Loop ëmmer erëm d'Längt vun der Array all Iteratioun.
Heiansdo kann dëst nëtzlech sinn, awer an de meeschte Fäll ass et méi effizient d'Längt vun der Array ze cache, wat een Zougang dozou erfuerdert. Mir kënnen dëst maachen andeems Dir eng Längtvariabel definéiert wou mir d'Variabel i definéieren, sou:
for (let i = 0, length = array.length; i < length; i++){
console.log(i);
}
Am Prinzip, bal d'selwecht wéi uewen, awer duerch d'Erhéijung vun der Loopgréisst wäerte mir bedeitend Zäit spueren.
Kuerzschluss Bewäertung (McCarthy Bewäertung)
CONDITIONAL OPERATOREN
Den ternäre Bedreiwer ass e séieren an effiziente Wee fir einfach (an heiansdo net sou einfach) bedingte Aussoen ze schreiwen:
x> 100? "méi wéi 100": "manner wéi 100";
x> 100? (x>200? "méi wéi 200": "tëscht 100-200": "manner wéi 100";
Awer heiansdo ass och den ternäre Bedreiwer méi komplizéiert wéi néideg. Mir kënnen 'an' && an 'oder' amplaz || Boolschen Bedreiwer fir bestëmmt Ausdréck op eng nach méi präzis Manéier ze evaluéieren. Et gëtt dacks "Kuerzschluss" oder "Kuerzschluss Bewäertung" genannt.
Wéi heescht dat Aarbecht
Loosst eis soen, mir wëllen nëmmen eng vun zwou oder méi Konditiounen zréckginn.
Mat && gëtt den éischte falsche Wäert zréck. Wann all Operand op richteg evaluéiert, da gëtt dee leschten Ausdrock evaluéiert zréck.
let one = 1, two = 2, three = 3;
console.log(one && two && three); // Result: 3
console.log(0 && null); // Result: 0
Benotzt || gëtt den éischte richtege Wäert zréck. Wann all Operand op falsch evaluéiert, da gëtt de leschte bewäertte Wäert zréck.
let one = 1, two = 2, three = 3;
console.log(one || two || three); // Result: 1
console.log(0 || null); // Result: null
Beispill 1
Loosst eis soen, mir wëllen d'Längt vun enger Variabel zréckginn, awer mir kennen seng Aart net.
An dësem Fall kënnt Dir benotzen wann / soss ze kontrolléieren dass foo déi richteg Zort ass, mä dës Method kann ze laang ginn. Dofir ass et besser eis "Kuerzschluss" ze huelen.
return (foo || []).length;
Wann d'Variabel Foo eng gëeegent Längt huet, da gëtt dat zréck. Soss kréie mir 0.
Beispill 2
Hutt Dir Probleemer mam Zougang zu engem nestet Objet? Dir wësst vläicht net ob en Objet oder eng vun hiren Ënnerproperties existéiert, an dëst kann zu Probleemer féieren.
Zum Beispill wollte mir op d'Dateeigenschaften an dësem.state zougräifen, awer d'Donnéeën sinn net definéiert bis eise Programm eng Fetch-Ufro zréckkënnt.
Ofhängeg vu wou mir et benotzen, dëst.state.data ruffen kann d'Applikatioun verhënneren. Fir de Problem ze léisen, kënne mir dëst an engem bedingten Ausdrock wéckelen:
Eng besser Optioun wier den "oder" Bedreiwer ze benotzen.
return (this.state.data || 'Fetching Data');
Mir kënnen de Code hei uewen net änneren fir && ze benotzen. Den 'Daten sichen' && this.state.data Bedreiwer wäert this.state.data zréckginn egal ob et ondefinéiert ass oder net.
Optional Kette
Et kéint ee proposéiere fir optional Ketten ze benotzen wann Dir probéiert eng Immobilie déif an eng Bamstruktur zréckzeginn. Also, d'Frozeechen Symbol? kann nëmme benotzt ginn fir eng Immobilie ze recuperéieren wann se net null ass.
Zum Beispill kënne mir d'Beispill hei uewen refaktoréieren fir this.state.data ze kréien?..(). Dat ass, Daten ginn nëmmen zréck wann de Wäert net null ass.
Oder, wann et wichteg ass, ob Staat definéiert ass oder net, mir kéinten this.state?.data zréckginn.
Konvertéieren an Boolean
TYPE Konversioun
Zousätzlech zu den normale boolesche Funktiounen richteg a falsch, behandelt JavaScript och all aner Wäerter als wouer oder falsch.
Bis anescht uginn, sinn all Wäerter am JavaScript wouer, ausser 0, "", null, ondefinéiert, NaN an natierlech falsch. Déi lescht si falsch.
Mir kënne ganz einfach tëscht deenen zwee wiesselen mam ! Bedreiwer, deen och den Typ op boolesch konvertéiert.
Et kënne Situatiounen sinn, wou + als Konkatenatiounsbedreiwer interpretéiert gëtt anstatt en Zousatzbetreiber. Fir dëst ze vermeiden, sollt Dir Tildes benotzen: ~~. Dëse Bedreiwer entsprécht -n-1. Zum Beispill, ~15 ass gläich wéi -16.
Zwee Tildes an enger Zeil benotzen negéiert d'Operatioun well - (- - n - 1) - 1 = n + 1 - 1 = n. An anere Wierder, ~-16 ass gläich wéi 15.
Vun ES7 un, kënnt Dir den Exponentiatiounsbedreiwer ** als Ofkierzung fir Muechten benotzen. Dëst ass vill méi séier wéi mat Math.pow (2, 3). Et schéngt einfach, mä dëse Punkt ass an der Lëscht vun Techniken abegraff, well et net iwwerall ernimmt ass.
console.log(2 ** 3); // Result: 8
Et sollt net mat dem ^ Symbol verwiesselt ginn, wat allgemeng fir Exponentiatioun benotzt gëtt. Awer a JavaScript ass dëst den XOR Bedreiwer.
Virun ES7 konnt d'** Ofkiirzung nëmme fir d'Kraaft vun der Basis 2 benotzt ginn mat dem bitwise lénksen Verréckelungsbedreiwer <<:
Math.pow(2, n);
2 << (n - 1);
2**n;
Zum Beispill, 2 << 3 = 16 entsprécht 2 ** 4 = 16.
Float op ganz Zuel
OPERATIOUNEN / TYPE Konversioun
Wann Dir braucht e Schwämm zu engem Ganzt ëmgerechent, Dir kënnt Math.floor benotzen (), Math.ceil () oder Math.round (). Awer et gëtt e méi séiere Wee, dofir benotze mir |, dat ass den OR Bedreiwer.
Behuelen | hänkt haaptsächlech dovun of, ob Dir mat positiven oder negativen Zuelen ze dinn hutt, also ass dës Method nëmme gëeegent wann Dir zouversiichtlech sidd wat Dir maacht.
n | an 0 läscht alles no der Dezimalseparator, truncéiert de Schwämm op eng ganz Zuel.
Dir kënnt dee selwechte Roundeffekt mat ~~ kréien. No der forcéierter Konversioun zu engem ganzen Zuel bleift de Wäert onverännert.
Ewechzehuelen Trailer Zuelen
Den ODER Bedreiwer kann benotzt ginn fir all Zuel vun Zifferen aus enger Zuel ze läschen. Dëst bedeit datt mir keng Typen wéi hei brauchen ze konvertéieren:
let str = "1553";
Number(str.substring(0, str.length - 1));
ES6 Pfeil Notatioune kënnen a Klassemethoden benotzt ginn, a Bindung ass implizéiert. Dat heescht, Dir kënnt Äddi soen op repetitive Ausdréck wéi this.myMethod = this.myMethod.bind(this)!