12 ЈаваСцрипт трикова које већина туторијала пропушта
Када сам почео да учим ЈаваСцрипт, прво што сам урадио је да направим листу трикова који су ми помогли да уштедим време. Приметио сам их код других програмера, на различитим сајтовима и у приручницима.
У овом чланку ћу вам показати 12 сјајних начина да побољшате и убрзате свој ЈаваСцрипт код. У већини случајева они су универзални.
Подсећамо:за све читаоце „Хабра“ – попуст од 10 рубаља при упису на било који курс Скиллбок користећи промотивни код „Хабр“.
У нормалној ситуацији, потребно је много више кода да би се извршила иста операција.
Ова техника ради за низове који садрже примитивне типове: недефинисани, нулл, логички, стринг и број. Ако радите са низом који садржи објекте, функције или додатне низове, биће вам потребан другачији приступ.
Дужина кеш низа у циклусима
ЦИЦЛЕС
Када научите фор петље, следите стандардну процедуру:
for (let i = 0; i < array.length; i++){
console.log(i);
}
Међутим, са овом синтаксом, фор петља више пута проверава дужину низа сваке итерације.
Понекад ово може бити корисно, али у већини случајева је ефикасније кеширати дужину низа, што ће захтевати један приступ њему. То можемо урадити тако што ћемо дефинисати променљиву дужине где дефинишемо променљиву и, овако:
for (let i = 0, length = array.length; i < length; i++){
console.log(i);
}
У принципу, скоро исто као горе, али повећањем величине петље добићемо значајну уштеду времена.
Оцена кратког споја (МцЦартхи оцена)
УСЛОВИ ОПЕРАТОРИ
Тернарни оператор је брз и ефикасан начин за писање једноставних (а понекад и не тако једноставних) условних изјава:
к> 100? „више од 100”: „мање од 100”;
к> 100? (к>200? "више од 200": "између 100-200"): "мање од 100";
Али понекад је чак и тернарни оператор компликованији него што је потребно. Можемо користити 'и' && и 'ор' уместо || Булови оператори за процену одређених израза на још сажетији начин. Често се назива "кратки спој" или "оцена кратког споја".
Како ово ради
Рецимо да желимо да вратимо само један од два или више услова.
Коришћење && ће вратити прву лажну вредност. Ако се сваки операнд процењује на тачно, онда ће бити враћен последњи процењени израз.
let one = 1, two = 2, three = 3;
console.log(one && two && three); // Result: 3
console.log(0 && null); // Result: 0
Коришћењем || вратиће прву праву вредност. Ако сваки операнд процијени на фалсе, онда ће бити враћена последња процењена вредност.
let one = 1, two = 2, three = 3;
console.log(one || two || three); // Result: 1
console.log(0 || null); // Result: null
primer КСНУМКС
Рецимо да желимо да вратимо дужину променљиве, али не знамо њен тип.
У овом случају, можете користити иф/елсе да проверите да ли је фоо прави тип, али овај метод може бити предугачак. Зато је боље узети наш „кратки спој“.
return (foo || []).length;
Ако променљива фоо има одговарајућу дужину, онда ће то бити враћено. Иначе ћемо добити 0.
primer КСНУМКС
Да ли сте имали проблема са приступом угнежђеном објекту? Можда не знате да ли постоји објекат или једно од његових подсвојстава, а то може довести до проблема.
На пример, желели смо да приступимо својству података у тхис.стате, али подаци нису дефинисани док наш програм не врати захтев за преузимање.
У зависности од тога где га користимо, позивање тхис.стате.дата може спречити покретање апликације. Да бисмо решили проблем, могли бисмо ово умотати у условни израз:
Не можемо да променимо код изнад да користи &&. Оператор 'Дохваћање података' && тхис.стате.дата ће вратити тхис.стате.дата без обзира да ли је недефинисан или не.
Опциони ланац
Могло би се предложити коришћење опционог уланчавања када покушавате да вратите својство дубоко у структуру дрвета. Дакле, симбол знака питања? може се користити за преузимање својства само ако није нулл.
На пример, могли бисмо да рефакторишемо горњи пример да добијемо тхис.стате.дата?..(). То јест, подаци се враћају само ако вредност није нула.
Или, ако је важно да ли је стање дефинисано или не, можемо да вратимо тхис.стате?.дата.
Претвори у Боолеан
КОНВЕРЗИЈА ТИПА
Поред нормалних логичких функција труе и фалсе, ЈаваСцрипт такође третира све друге вредности као истините или нетачне.
Док није другачије назначено, све вредности у ЈаваСцрипт-у су истините, осим 0, "", нулл, недефинисано, НаН и, наравно, нетачно. Потоњи су лажни.
Можемо лако да прелазимо између њих помоћу оператора !, који такође конвертује тип у боолеан.
Могу постојати ситуације у којима ће се + тумачити као оператор конкатенације, а не као оператор сабирања. Да бисте ово избегли, требало би да користите тилде: ~~. Овај оператор је еквивалентан -н-1. На пример, ~15 је једнако -16.
Коришћење две тилде у низу негира операцију јер - (- - н - 1) - 1 = н + 1 - 1 = н. Другим речима, ~-16 је једнако 15.
Почевши од ЕС7, можете користити оператор експоненцијације ** као скраћеницу за степене. Ово је много брже од коришћења Матх.пов(2, 3). Чини се једноставно, али ова тачка је укључена у листу техника, јер се не помиње свуда.
console.log(2 ** 3); // Result: 8
Не треба га мешати са симболом ^, који се обично користи за експоненцијацију. Али у ЈаваСцрипт-у ово је КСОР оператор.
Пре ЕС7, ** пречица је могла да се користи само за моћи базе 2 помоћу оператора померања улево у битовима <<:
Math.pow(2, n);
2 << (n - 1);
2**n;
На пример, 2 << 3 = 16 је еквивалентно 2 ** 4 = 16.
Флоат до цео број
ОПЕРАЦИЈЕ / КОНВЕРЗИЈА ТИПА
Ако треба да конвертујете флоат у цео број, можете користити Матх.флоор(), Матх.цеил() или Матх.роунд(). Али постоји бржи начин, за ово користимо |, односно оператор ОР.
Бехавиор | у великој мери зависи од тога да ли имате посла са позитивним или негативним бројевима, тако да је овај метод прикладан само ако сте сигурни у оно што радите.
н | 0 уклања све после децималног сепаратора, скраћујући флоат на цео број.
Можете добити исти ефекат заокруживања користећи ~~. Након принудне конверзије у цео број, вредност остаје непромењена.
Уклањање завршних бројева
Оператор ОР се може користити за уклањање било ког броја цифара из броја. То значи да не морамо да конвертујемо типове као што је овде:
let str = "1553";
Number(str.substring(0, str.length - 1));
ЕС6 ознаке стрелица се могу користити у методама класа, а везивање се подразумева. То значи да се можете опростити од израза који се понављају као што је тхис.миМетход = тхис.миМетход.бинд(тхис)!