Көпчүлүк окуу куралдары байкалбаган 12 JavaScript трюктары
Мен JavaScript үйрөнө баштаганда, эң биринчи кылган нерсем убакытты үнөмдөөгө жардам берген амалдардын тизмесин түздүм. Мен аларды башка программисттерден, ар кандай сайттардан жана колдонмолордон байкадым.
Бул макалада мен сизге JavaScript кодуңузду жакшыртуунун жана тездетүүнүн 12 мыкты жолун көрсөтөм. Көпчүлүк учурларда алар универсалдуу болуп саналат.
Биз эсиңизге салабыз:"Хабрдын" бардык окурмандары үчүн - "Habr" промо-кодун колдонуу менен каалаган Skillbox курсуна катталганда 10 000 рубль арзандатуу.
Set объектинин түрү ES6да киргизилген..., жайылтуу оператору менен бирге, биз аны уникалдуу маанилерди гана камтыган жаңы массивди түзүү үчүн колдоно алабыз.
Кадимки кырдаалда бир эле операцияны аткаруу үчүн дагы көп код талап кылынат.
Бул ыкма примитивдүү типтерди камтыган массивдер үчүн иштейт: аныкталбаган, нөлдүк, логикалык, сап жана сан. Эгер сиз объекттерди, функцияларды же кошумча массивдерди камтыган массив менен иштеп жатсаңыз, анда башка ыкма керек болот.
Кэш массивинин циклдердеги узундугу
ЦИКЛДЕР
For циклдерин үйрөнгөндө сиз стандарттуу процедураны аткарасыз:
for (let i = 0; i < array.length; i++){
console.log(i);
}
Бирок, бул синтаксис менен for цикли ар бир итерацияда массивдин узундугун кайра-кайра текшерет.
Кээде бул пайдалуу болушу мүмкүн, бирок көпчүлүк учурларда массивдин узундугун кэштөө натыйжалуураак, ал үчүн ага бир жетүү талап кылынат. Муну биз i өзгөрмөсүн аныктай турган узундуктагы өзгөрмөнү аныктоо менен жасай алабыз, мисалы:
for (let i = 0, length = array.length; i < length; i++){
console.log(i);
}
Негизи жогорудагыдай дээрлик бирдей, бирок циклдин көлөмүн көбөйтүү менен биз убакытты үнөмдөйбүз.
Кыска туташуу рейтинги (Маккарти рейтинги)
ШАРТТУУ ОПЕРАТОРЛОР
Үчтүк оператор жөнөкөй (кээде анчалык деле жөнөкөй эмес) шарттуу билдирүүлөрдү жазуунун тез жана натыйжалуу жолу:
Бирок кээде үчтүк оператор талап кылынгандан да татаал. || ордуна 'жана' && жана 'же' колдонсок болот Логикалык операторлор кээ бир туюнтмаларды дагы кыскараак түрдө баалоо үчүн. Ал көбүнчө "кыска туташуу" же "кыска туташуунун рейтинги" деп аталат.
Бул кандай иштейт
Эки же андан көп шарттардын бирин гана кайтаргыбыз келет дейли.
&& колдонуу биринчи жалган маанини кайтарат. Эгерде ар бир операнд чындыкка баа берсе, анда акыркы бааланган туюнтма кайтарылат.
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
мисал 1
Биз өзгөрмөнүн узундугун кайтаргыбыз келет дейли, бирок анын түрүн билбейбиз.
Бул учурда, foo туура түрү экенин текшерүү үчүн if/else колдонсоңуз болот, бирок бул ыкма өтө узун болушу мүмкүн. Ошондуктан, биздин "кыска туташууну" алган жакшы.
return (foo || []).length;
Эгерде foo өзгөрмөнүн узундугу ылайыктуу болсо, анда ал кайтарылат. Болбосо 0 алабыз.
мисал 2
Сизде уя салынган объектке кирүүдө кыйынчылыктар болду беле? Сиз объекттин же анын субпродуктунун бар же жок экенин билбей калышы мүмкүн жана бул көйгөйлөргө алып келиши мүмкүн.
Мисалы, биз this.state ичиндеги маалымат касиетине кирүүнү кааладык, бирок биздин программа алып келүү өтүнүчүн кайтармайынча маалыматтар аныкталбайт.
Аны кайда колдонгонубузга жараша this.state.data деп чакыруу колдонмонун башталышына тоскоол болушу мүмкүн. Маселени чечүү үчүн, биз муну шарттуу туюнтма менен ороп алсак болот:
Биз && колдонуу үчүн жогорудагы кодду өзгөртө албайбыз. "Маалыматтарды алуу" && this.state.data оператору this.state.data аныкталбаганына же аныкталбаганына карабастан кайтарып берет.
Кошумча чынжыр
Менчикти дарактын структурасына терең кайтарууга аракет кылып жатканда, кошумча чынжырды колдонууну сунуш кылышы мүмкүн. Демек, суроо белгиси белгиси? нөл эмес болсо гана мүлктү алуу үчүн колдонулушу мүмкүн.
Мисалы, this.state.data?..() алуу үчүн жогорудагы мисалды рефакторация кылсак болот. Башкача айтканда, маалыматтар мааниси нөл эмес болсо гана кайтарылат.
Же, эгерде абалдын аныкталганы же аныкталбаганы маанилүү болсо, биз бул.мамлекет?.маалыматты кайтара алабыз.
Буль тилине айландыруу
ТИП КОНВЕРСИЯСЫ
Кадимки логикалык чыныгы жана жалган функцияларынан тышкары, JavaScript башка бардык баалуулуктарды чындык же жалган деп эсептейт.
Башкасы көрсөтүлмөйүнчө, 0, "", null, аныкталбаган, NaN жана, албетте, жалгандан башка, JavaScript'теги бардык маанилер чындык. Акыркылары жалган.
Биз ! операторунун жардамы менен экөөнүн ортосунда оңой которула алабыз, ал ошондой эле типти логикага айландырат.
+ кошуу оператору эмес, бириктирүү оператору катары чечмеленүүчү жагдайлар болушу мүмкүн. Мунун алдын алуу үчүн тилдаларды колдонушуңуз керек: ~~. Бул оператор -n-1ге барабар. Мисалы, ~15 -16га барабар.
Эки тильданы катары менен колдонуу операцияны жокко чыгарат, анткени - (- - n - 1) - 1 = n + 1 - 1 = n. Башкача айтканда, ~-16 15ке барабар.
ES7ден баштап, сиз экспонентация операторун ** ыйгарым укуктардын стенографиясы катары колдоно аласыз. Бул Math.pow (2, 3) колдонууга караганда алда канча тезирээк. Бул жөнөкөй көрүнөт, бирок бул пункт бардык жерде айтылган эмес, анткени, ыкмалардын тизмесине киргизилген.
console.log(2 ** 3); // Result: 8
Аны экспонентация үчүн көбүнчө колдонулган ^ символу менен чаташтырбоо керек. Бирок JavaScriptте бул XOR оператору.
ES7ге чейин ** жарлыкты биттик солго жылдыруу операторун колдонуп, 2-базанын ыйгарым укуктары үчүн гана колдонсо болот <<:
Math.pow(2, n);
2 << (n - 1);
2**n;
Мисалы, 2 << 3 = 16 2 ** 4 = 16га барабар.
Бүтүн санга сүзүү
ОПЕРАЦИЯЛАР / ТИП КОНВЕРСИЯСЫ
Эгер сиз флотту бүтүн санга айландырышыңыз керек болсо, Math.floor(), Math.ceil() же Math.round() колдонсоңуз болот. Бирок тезирээк жолу бар, бул үчүн биз |, башкача айтканда, ЖЕ операторун колдонобуз.
Behavior | Оң же терс сандар менен иштешип жатканыңыздан көз каранды, ошондуктан бул ыкма сиз эмне кылып жатканыңызга ишенсеңиз гана ылайыктуу.
n | 0 ондук бөлгүчтөн кийин баарын алып салат, калкып чыгууну бүтүн санга кыскартат.
Сиз ~~ менен бирдей тегеректөө эффектин ала аласыз. Бүтүн санга мажбурлап которуудан кийин маани өзгөрүүсүз калат.
Арткы сандарды алып салуу
ЖЕ операторун сандан каалаган сандагы цифраларды алып салуу үчүн колдонсо болот. Бул биз бул жердегидей түрлөрдү которуунун кереги жок дегенди билдирет:
let str = "1553";
Number(str.substring(0, str.length - 1));
ES6 жебе белгилер класстын методдорунда колдонулушу мүмкүн жана милдеттүү түрдө байланыштырат. Бул сиз this.myMethod = this.myMethod.bind(this) сыяктуу кайталануучу туюнтмалар менен коштошсоңуз болот дегенди билдирет!