Əksər Dərsliklərin Darıxdığı 12 JavaScript Hiyləsi
JavaScript öyrənməyə başlayanda ilk etdiyim iş mənə vaxta qənaət etməyə kömək edən fəndlərin siyahısını tərtib etmək oldu. Mən onları başqa proqramçılardan, müxtəlif saytlarda və dərsliklərdə tapdım.
Bu yazıda mən sizə JavaScript kodunuzu təkmilləşdirməyin və sürətləndirməyin 12 əla yolunu göstərəcəyəm. Əksər hallarda onlar universaldır.
Xatırladırıq:"Habr" ın bütün oxucuları üçün - "Habr" promosyon kodundan istifadə edərək hər hansı bir Skillbox kursuna yazılarkən 10 000 rubl endirim.
Set obyekt növü ES6-da təqdim edilmişdir, yayılma operatoru ilə birlikdə biz ondan yalnız unikal dəyərləri ehtiva edən yeni massiv yaratmaq üçün istifadə edə bilərik.
Normal vəziyyətdə, eyni əməliyyatı yerinə yetirmək üçün daha çox kod tələb olunur.
Bu texnika primitiv tipləri olan massivlər üçün işləyir: müəyyən edilməmiş, null, boolean, sətir və nömrə. Obyektləri, funksiyaları və ya əlavə massivləri ehtiva edən massivlə işləyirsinizsə, sizə fərqli yanaşma lazımdır.
Dövrlərdə keş massivinin uzunluğu
DÖVRLƏR
For döngələrini öyrəndiyiniz zaman standart prosedura əməl edirsiniz:
for (let i = 0; i < array.length; i++){
console.log(i);
}
Bununla belə, bu sintaksis ilə for döngəsi hər iterasiyada massivin uzunluğunu dəfələrlə yoxlayır.
Bəzən bu faydalı ola bilər, lakin əksər hallarda massivin uzunluğunu keşləmək daha səmərəlidir, bu isə ona bir giriş tələb edir. Bunu i dəyişənini təyin etdiyimiz uzunluq dəyişənini təyin etməklə edə bilərik, məsələn:
for (let i = 0, length = array.length; i < length; i++){
console.log(i);
}
Prinsipcə, yuxarıdakı kimi demək olar ki, eynidir, lakin loop ölçüsünü artırmaqla biz əhəmiyyətli vaxta qənaət edəcəyik.
Qısa qapanma reytinqi (McCarthy reytinqi)
ŞƏRTLİ OPERATORLAR
Üçlü operator sadə (və bəzən o qədər də sadə olmayan) şərti ifadələri yazmaq üçün sürətli və səmərəli üsuldur:
Ancaq bəzən hətta üçlü operator tələb olunandan daha mürəkkəbdir. Biz 'və' && və 'və ya' əvəzinə || istifadə edə bilərik Bəzi ifadələri daha qısa şəkildə qiymətləndirmək üçün Boolean operatorları. Tez-tez "qısa qapanma" və ya "qısa qapanma reytinqi" adlanır.
Bu necə işləyir
Tutaq ki, biz iki və ya daha çox şərtdən yalnız birini qaytarmaq istəyirik.
&& istifadə ilk yanlış dəyəri qaytaracaq. Hər bir operand doğru olaraq qiymətləndirilirsə, o zaman qiymətləndirilən sonuncu ifadə qaytarılacaq.
let one = 1, two = 2, three = 3;
console.log(one && two && three); // Result: 3
console.log(0 && null); // Result: 0
|| istifadə edərək ilk həqiqi dəyəri qaytaracaq. Hər bir operand yalnış olaraq qiymətləndirilərsə, son qiymətləndirilən dəyər qaytarılacaq.
let one = 1, two = 2, three = 3;
console.log(one || two || three); // Result: 1
console.log(0 || null); // Result: null
Məsələn 1
Tutaq ki, biz dəyişənin uzunluğunu qaytarmaq istəyirik, lakin onun tipini bilmirik.
Bu halda foo-nun düzgün tip olduğunu yoxlamaq üçün if/else istifadə edə bilərsiniz, lakin bu üsul çox uzun ola bilər. Buna görə "qısa qapanma"mızı götürmək daha yaxşıdır.
return (foo || []).length;
Əgər foo dəyişəni uyğun uzunluğa malikdirsə, o, qaytarılacaq. Əks halda 0 alacağıq.
Məsələn 2
Daxili obyektə daxil olmaqda probleminiz olub? Ola bilsin ki, siz obyektin və ya onun alt xassələrindən birinin mövcud olub-olmadığını bilmirsiniz və bu, problemlərə səbəb ola bilər.
Məsələn, biz this.state-də data xassəsinə daxil olmaq istəyirdik, lakin proqramımız gətirmə sorğusunu qaytarana qədər data müəyyən edilmir.
İstifadə etdiyimiz yerdən asılı olaraq this.state.data zəngi tətbiqin başlamasına mane ola bilər. Problemi həll etmək üçün bunu şərti ifadə ilə əhatə edə bilərik:
Daha yaxşı seçim "və ya" operatorundan istifadə etmək olardı.
return (this.state.data || 'Fetching Data');
Biz yuxarıdakı kodu && istifadə etmək üçün dəyişə bilmərik. 'Məlumatların alınması' && this.state.data operatoru müəyyən edilməmiş olub-olmamasından asılı olmayaraq this.state.data-nı qaytaracaq.
İsteğe bağlı zəncir
Mülkiyyəti ağac quruluşuna dərindən qaytarmağa çalışarkən isteğe bağlı zəncirləmə istifadə etməyi təklif edə bilərsiniz. Beləliklə, sual işarəsi simvolu? yalnız null olmadıqda əmlakı əldə etmək üçün istifadə edilə bilər.
Məsələn, bu.state.data?..() əldə etmək üçün yuxarıdakı nümunəni refaktor edə bilərik. Yəni, məlumat yalnız dəyər sıfır olmadıqda qaytarılır.
Və ya vəziyyətin müəyyən edilib-edilməməsi vacib olsa, biz bu.state?.data-nı qaytara bilərik.
Boolean dilinə çevirin
TİP DÖNÜŞMƏSİ
Normal boolean doğru və yalan funksiyalarına əlavə olaraq, JavaScript bütün digər dəyərləri də doğru və ya yalan hesab edir.
Əksi qeyd olunana qədər, JavaScript-də bütün dəyərlər doğrudur, 0, "", null, qeyri-müəyyən, NaN və əlbəttə ki, yalandan başqa. Sonuncular yalançıdır.
Biz ! operatorundan istifadə edərək ikisi arasında asanlıqla keçid edə bilərik, o da növü booleana çevirir.
+-nın əlavə operatoru deyil, birləşmə operatoru kimi şərh ediləcəyi vəziyyətlər ola bilər. Bunun qarşısını almaq üçün tilda işarələrindən istifadə etməlisiniz: ~~. Bu operator -n-1-ə bərabərdir. Məsələn, ~15 -16-ya bərabərdir.
Ardıcıl iki tildadan istifadə əməliyyatı rədd edir, çünki - (- - n - 1) - 1 = n + 1 - 1 = n. Başqa sözlə, ~-16 15-ə bərabərdir.
ES7-dən başlayaraq, güclərin stenoqramı kimi eksponentasiya operatorundan ** istifadə edə bilərsiniz. Bu, Math.pow (2, 3) istifadə etməkdən daha sürətlidir. Sadə görünür, lakin bu nöqtə hər yerdə qeyd olunmadığı üçün texnikalar siyahısına daxildir.
console.log(2 ** 3); // Result: 8
Onu eksponentasiya üçün adətən istifadə olunan ^ simvolu ilə qarışdırmaq olmaz. Lakin JavaScript-də bu XOR operatorudur.
ES7-dən əvvəl ** qısayolu yalnız bit istiqamətində sola sürüşdürmə operatorundan istifadə edərək 2-ci bazanın səlahiyyətləri üçün istifadə edilə bilərdi <<:
Math.pow(2, n);
2 << (n - 1);
2**n;
Məsələn, 2 << 3 = 16 2 ** 4 = 16-ya bərabərdir.
Tam ədədə sürüşdürün
ƏMƏLİYYATLAR / NÖVLƏRİN DÖNÜŞMƏSİ
Əgər floatı tam ədədə çevirmək lazımdırsa, siz Math.floor(), Math.ceil() və ya Math.round() istifadə edə bilərsiniz. Ancaq daha sürətli bir yol var, bunun üçün biz |, yəni OR operatorundan istifadə edirik.
Davranış | əsasən müsbət və ya mənfi ədədlərlə məşğul olub-olmamağınızdan asılıdır, buna görə də bu üsul yalnız etdiyiniz işdən əminsinizsə uyğun gəlir.
n | 0, ondalık ayırıcıdan sonra hər şeyi silir, floatı tam ədədə qədər kəsir.
Eyni yuvarlaqlaşdırma effektini ~~ istifadə edərək əldə edə bilərsiniz. Tam ədədə məcburi çevrilmədən sonra dəyər dəyişməz qalır.
Arxadakı nömrələrin silinməsi
OR operatoru nömrədən istənilən sayda rəqəmi silmək üçün istifadə edilə bilər. Bu o deməkdir ki, buradakı kimi növləri çevirməyə ehtiyac yoxdur:
let str = "1553";
Number(str.substring(0, str.length - 1));
ES6 ox qeydləri sinif metodlarında istifadə edilə bilər və bağlama nəzərdə tutulur. Bu o deməkdir ki, this.myMethod = this.myMethod.bind(this) kimi təkrarlanan ifadələrlə vidalaşa bilərsiniz!