Ko'pchilik o'quv qo'llanmalari o'tkazib yuboradigan 12 ta JavaScript hiylasi
JavaScript-ni o'rganishni boshlaganimda, birinchi qilgan ishim vaqtni tejashga yordam beradigan fokuslar ro'yxatini tuzish edi. Men ularni boshqa dasturchilardan, turli saytlarda va qo'llanmalarda ko'rdim.
Ushbu maqolada men sizga JavaScript kodingizni yaxshilash va tezlashtirishning 12 ta ajoyib usulini ko'rsataman. Aksariyat hollarda ular universaldir.
Sizga eslatib o'tamiz:"Habr" ning barcha o'quvchilari uchun - "Habr" promo-kodidan foydalangan holda har qanday Skillbox kursiga yozilishda 10 000 rubl chegirma.
Set obyekti turi ES6 da joriy qilingan, tarqalish operatori bilan bir qatorda biz undan faqat noyob qiymatlarni oβz ichiga olgan yangi massiv yaratish uchun foydalanishimiz mumkin.
Oddiy holatda, xuddi shu operatsiyani bajarish uchun ko'proq kod kerak bo'ladi.
Ushbu uslub ibtidoiy turlarni o'z ichiga olgan massivlar uchun ishlaydi: aniqlanmagan, null, mantiqiy, satr va raqam. Agar siz ob'ektlar, funktsiyalar yoki qo'shimcha massivlarni o'z ichiga olgan massiv bilan ishlayotgan bo'lsangiz, sizga boshqacha yondashuv kerak bo'ladi.
Tsikllardagi kesh massivining uzunligi
SIKILLAR
For looplarini o'rganganingizda, siz standart protseduraga amal qilasiz:
for (let i = 0; i < array.length; i++){
console.log(i);
}
Biroq, bu sintaksis bilan for tsikli har bir iteratsiyada massiv uzunligini qayta-qayta tekshiradi.
Ba'zan bu foydali bo'lishi mumkin, lekin ko'p hollarda massiv uzunligini keshlash samaraliroq bo'ladi, bu unga bir marta kirishni talab qiladi. Buni uzunlik o'zgaruvchisini aniqlash orqali amalga oshirishimiz mumkin, bu erda biz i o'zgaruvchisini quyidagicha aniqlaymiz:
for (let i = 0, length = array.length; i < length; i++){
console.log(i);
}
Aslida, yuqoridagi kabi deyarli bir xil, lekin pastadir hajmini oshirish orqali biz vaqtni sezilarli darajada tejashga erishamiz.
Qisqa tutashuv reytingi (McCarthy reytingi)
SHARTLI OPERATORLAR
Uchlik operator oddiy (va ba'zan unchalik oddiy bo'lmagan) shartli gaplarni yozishning tez va samarali usulidir:
x> 100? β100 dan ortiqβ: β100 dan kamβ;
x> 100? (x>200? "200 dan ortiq": "100-200 orasida"): "100 dan kam";
Ammo ba'zida hatto uchlik operator ham talab qilinganidan ko'ra murakkabroq. Biz || o'rniga "va" && va "yoki" dan foydalanishimiz mumkin Ba'zi ifodalarni yanada ixchamroq baholash uchun mantiqiy operatorlar. Ko'pincha "qisqa tutashuv" yoki "qisqa tutashuv reytingi" deb ataladi.
U qanday ishlaydi
Aytaylik, biz ikki yoki undan ortiq shartlardan faqat bittasini qaytarmoqchimiz.
&& dan foydalanish birinchi noto'g'ri qiymatni qaytaradi. Agar har bir operand rost deb baholansa, oxirgi baholangan ifoda qaytariladi.
let one = 1, two = 2, three = 3;
console.log(one && two && three); // Result: 3
console.log(0 && null); // Result: 0
|| yordamida birinchi haqiqiy qiymatni qaytaradi. Agar har bir operand noto'g'ri deb baholansa, oxirgi baholangan qiymat qaytariladi.
let one = 1, two = 2, three = 3;
console.log(one || two || three); // Result: 1
console.log(0 || null); // Result: null
misol 1
Aytaylik, biz o'zgaruvchining uzunligini qaytarmoqchimiz, lekin uning turini bilmaymiz.
Bunday holda, foo ning to'g'ri turi ekanligini tekshirish uchun if/else dan foydalanishingiz mumkin, ammo bu usul juda uzun bo'lishi mumkin. Shuning uchun, bizning "qisqa tutashuv" ni olish yaxshiroqdir.
return (foo || []).length;
Agar foo o'zgaruvchisi mos uzunlikka ega bo'lsa, u qaytariladi. Aks holda biz 0 ni olamiz.
misol 2
Ichki ob'ektga kirishda muammolarga duch keldingizmi? Ob'ekt yoki uning pastki xususiyatlaridan biri mavjudligini bilmasligingiz mumkin va bu muammolarga olib kelishi mumkin.
Misol uchun, biz this.state-dagi ma'lumotlar xususiyatiga kirmoqchi edik, ammo dasturimiz olish so'rovini qaytarmaguncha ma'lumotlar aniqlanmaydi.
Biz uni qayerda ishlatishimizga qarab this.state.data deb chaqirish dasturni ishga tushirishga xalaqit berishi mumkin. Muammoni hal qilish uchun biz buni shartli ifoda bilan o'rashimiz mumkin:
Eng yaxshi variant "yoki" operatoridan foydalanish bo'ladi.
return (this.state.data || 'Fetching Data');
Yuqoridagi kodni && ishlatish uchun oΚ»zgartira olmaymiz. "Ma'lumotlarni olish" && this.state.data operatori aniqlanmagan yoki aniqlanmaganligidan qat'iy nazar this.state.data ni qaytaradi.
Ixtiyoriy zanjir
Mulkni daraxt tuzilishiga qaytarishga urinayotganda ixtiyoriy zanjirdan foydalanishni taklif qilish mumkin. Xo'sh, savol belgisi belgisi? faqat null bo'lmasa, xususiyatni olish uchun ishlatilishi mumkin.
Masalan, this.state.data?..() olish uchun yuqoridagi misolni qayta tahrirlashimiz mumkin. Ya'ni, agar qiymat null bo'lmasa, ma'lumotlar qaytariladi.
Yoki holat aniqlanganmi yoki aniqlanmaganligi muhim bo'lsa, biz this.state?.data-ni qaytarishimiz mumkin.
Booleanga aylantiring
TUR AYLANTIRISH
Oddiy mantiqiy funktsiyalar rost va yolg'ondan tashqari, JavaScript boshqa barcha qiymatlarni ham haqiqat yoki yolg'on deb hisoblaydi.
Aksi qayd etilmaguncha, JavaScript-dagi barcha qiymatlar haqiqatdir, 0, "", null, aniqlanmagan, NaN va, albatta, yolg'ondan tashqari. Ikkinchisi soxta.
Biz ! operatori yordamida ikkalasini osongina almashtirishimiz mumkin, u ham turni mantiqiyga aylantiradi.
Vaziyatlar bo'lishi mumkinki, + qo'shish operatori emas, balki birlashtiruvchi operator sifatida talqin qilinadi. Bunga yo'l qo'ymaslik uchun tildalardan foydalanish kerak: ~~. Bu operator -n-1 ga ekvivalent. Masalan, ~15 -16 ga teng.
Ketma-ket ikkita tildadan foydalanish operatsiyani inkor etadi, chunki - (- - n - 1) - 1 = n + 1 - 1 = n. Boshqacha qilib aytganda, ~-16 15 ga teng.
ES7-dan boshlab, siz ** ko'rsatkich operatoridan quvvatlarning qisqartmasi sifatida foydalanishingiz mumkin. Bu Math.pow (2, 3) dan foydalanishdan ancha tezroq. Bu oddiy ko'rinadi, ammo bu nuqta texnikalar ro'yxatiga kiritilgan, chunki u hamma joyda eslatilmaydi.
console.log(2 ** 3); // Result: 8
Uni eksponentsiya uchun keng tarqalgan ^ belgisi bilan aralashtirib yubormaslik kerak. Ammo JavaScript-da bu XOR operatori.
ES7 dan oldin ** yorlig'i faqat 2-bazaning quvvatlari uchun bit bo'yicha chapga siljitish operatori << yordamida ishlatilishi mumkin edi:
Math.pow(2, n);
2 << (n - 1);
2**n;
Masalan, 2 << 3 = 16 2 ** 4 = 16 ga teng.
Butun songa suzish
AMALIYATLAR / TURNI AYLANTIRISH
Agar floatni butun songa aylantirish kerak bo'lsa, siz Math.floor(), Math.ceil() yoki Math.round() dan foydalanishingiz mumkin. Lekin tezroq yo'li bor, buning uchun biz |, ya'ni OR operatoridan foydalanamiz.
Xulq-atvor | ko'p jihatdan siz ijobiy yoki salbiy raqamlar bilan shug'ullanayotganingizga bog'liq, shuning uchun bu usul faqat qilayotgan ishingizga ishonchingiz komil bo'lsa mos keladi.
n | 0 o'nlik ajratgichdan keyin hamma narsani olib tashlaydi, floatni butun songa qisqartiradi.
~~ yordamida bir xil yaxlitlash effektini olishingiz mumkin. Butun songa majburiy aylantirilgandan so'ng, qiymat o'zgarishsiz qoladi.
Keyingi raqamlarni olib tashlash
OR operatori raqamdan istalgan sondagi raqamlarni olib tashlash uchun ishlatilishi mumkin. Bu shuni anglatadiki, biz bu erdagi kabi turlarni aylantirishimiz shart emas:
let str = "1553";
Number(str.substring(0, str.length - 1));
ES6 o'q belgilaridan sinf usullarida foydalanish mumkin va bog'lash nazarda tutilgan. Bu shuni anglatadiki, siz this.myMethod = this.myMethod.bind(this) kabi takrorlanuvchi iboralar bilan xayrlashishingiz mumkin!
Siz allaqachon JSON.stringify-dan foydalangan bo'lishingiz mumkin. Bu sizning JSON-ni formatlashda yordam berishini bilasizmi?
Stringify() usuli ikkita ixtiyoriy parametrni oladi: ko'rsatilgan JSONni filtrlash uchun ishlatilishi mumkin bo'lgan almashtiruvchi funksiya va bo'sh joy qiymati.
console.log(JSON.stringify({ alpha: 'A', beta: 'B' }, null, 't'));
// Result:
// '{
// "alpha": A,
// "beta": B
// }'
Hammasi shu, umid qilamanki, bu usullarning barchasi foydali bo'ldi. Qanday nayranglarni bilasiz? Ularni izohlarda yozing.