12 Trik JavaScript yang Kebanyakan Tutorial Lewatkan
Saat saya mulai belajar JavaScript, hal pertama yang saya lakukan adalah membuat daftar trik yang membantu saya menghemat waktu. Saya melihatnya dari programmer lain, di situs berbeda dan di manual.
Pada artikel ini, saya akan menunjukkan 12 cara hebat untuk meningkatkan dan mempercepat kode JavaScript Anda. Dalam kebanyakan kasus, mereka bersifat universal.
Kami mengingatkan:untuk semua pembaca "Habr" - diskon 10 rubel saat mendaftar di kursus Skillbox apa pun menggunakan kode promosi "Habr".
Tipe objek Set diperkenalkan di ES6, bersama dengan..., operator spread, kita dapat menggunakannya untuk membuat array baru yang hanya berisi nilai unik.
Dalam situasi normal, diperlukan lebih banyak kode untuk melakukan operasi yang sama.
Teknik ini berfungsi untuk array yang berisi tipe primitif: undefinisi, null, boolean, string, dan angka. Jika Anda bekerja dengan array yang berisi objek, fungsi, atau array tambahan, Anda memerlukan pendekatan yang berbeda.
Panjang array cache dalam siklus
SIKLUS
Saat Anda mempelajari perulangan for, Anda mengikuti prosedur standar:
for (let i = 0; i < array.length; i++){
console.log(i);
}
Namun, dengan sintaks ini, perulangan for berulang kali memeriksa panjang array setiap iterasi.
Kadang-kadang ini bisa berguna, tetapi dalam banyak kasus, lebih efisien untuk menyimpan cache panjang array, yang akan memerlukan satu akses ke dalamnya. Kita dapat melakukan ini dengan mendefinisikan variabel panjang dimana kita mendefinisikan variabel i, seperti ini:
for (let i = 0, length = array.length; i < length; i++){
console.log(i);
}
Prinsipnya hampir sama seperti di atas, namun dengan memperbesar ukuran loop kita akan mendapatkan penghematan waktu yang signifikan.
Peringkat hubung singkat (peringkat McCarthy)
OPERATOR KONDISI
Operator ternary adalah cara yang cepat dan efisien untuk menulis pernyataan kondisional yang sederhana (dan terkadang tidak sesederhana itu):
x> 100? “lebih dari 100”: “kurang dari 100”;
x> 100? (x>200? "lebih dari 200": "antara 100-200"): "kurang dari 100";
Namun terkadang bahkan operator ternary lebih rumit dari yang dibutuhkan. Kita bisa menggunakan 'dan' && dan 'atau' sebagai gantinya || Operator Boolean untuk mengevaluasi ekspresi tertentu dengan cara yang lebih ringkas. Hal ini sering disebut "korsleting" atau "peringkat hubung singkat".
Bagaimana itu bekerja
Katakanlah kita hanya ingin mengembalikan satu dari dua kondisi atau lebih.
Menggunakan && akan mengembalikan nilai salah pertama. Jika setiap operan bernilai benar, maka ekspresi terakhir yang dievaluasi akan dikembalikan.
let one = 1, two = 2, three = 3;
console.log(one && two && three); // Result: 3
console.log(0 && null); // Result: 0
Menggunakan || akan mengembalikan nilai sebenarnya pertama. Jika setiap operan bernilai false, maka nilai terakhir yang dievaluasi akan dikembalikan.
let one = 1, two = 2, three = 3;
console.log(one || two || three); // Result: 1
console.log(0 || null); // Result: null
misalnya 1
Katakanlah kita ingin mengembalikan panjang suatu variabel, tetapi kita tidak mengetahui tipenya.
Dalam hal ini, Anda dapat menggunakan if/else untuk memeriksa apakah foo adalah tipe yang tepat, namun metode ini mungkin terlalu panjang. Oleh karena itu, lebih baik kita mengambil “korsleting” kita.
return (foo || []).length;
Jika variabel foo memiliki panjang yang sesuai, maka variabel tersebut akan dikembalikan. Kalau tidak, kita akan mendapatkan 0.
misalnya 2
Apakah Anda mengalami masalah saat mengakses objek bersarang? Anda mungkin tidak mengetahui apakah suatu objek atau salah satu sub-propertinya ada, dan hal ini dapat menimbulkan masalah.
Misalnya, kami ingin mengakses properti data di this.state, tetapi data tidak ditentukan hingga program kami mengembalikan permintaan pengambilan.
Tergantung di mana kita menggunakannya, memanggil this.state.data mungkin mencegah aplikasi untuk memulai. Untuk mengatasi masalah ini, kita dapat membungkusnya dalam ekspresi kondisional:
Pilihan yang lebih baik adalah menggunakan operator "atau".
return (this.state.data || 'Fetching Data');
Kami tidak dapat mengubah kode di atas untuk menggunakan &&. Operator 'Mengambil Data' && this.state.data akan mengembalikan this.state.data terlepas dari apakah itu tidak ditentukan atau tidak.
Rantai opsional
Seseorang mungkin menyarankan penggunaan rangkaian opsional ketika mencoba mengembalikan properti jauh ke dalam struktur pohon. Jadi, simbol tanda tanya? dapat digunakan untuk mengambil properti hanya jika properti tersebut bukan null.
Misalnya, kita dapat memfaktorkan ulang contoh di atas untuk mendapatkan this.state.data?..(). Artinya, data dikembalikan hanya jika nilainya bukan nol.
Atau, jika status ditentukan atau tidak, kita dapat mengembalikan this.state?.data.
Konversikan ke Boolean
KONVERSI JENIS
Selain fungsi boolean normal benar dan salah, JavaScript juga memperlakukan semua nilai lainnya sebagai benar atau salah.
Sampai dinyatakan lain, semua nilai dalam JavaScript adalah benar, kecuali 0, "", null, tidak terdefinisi, NaN dan, tentu saja, salah. Yang terakhir ini salah.
Kita dapat dengan mudah beralih di antara keduanya menggunakan operator !, yang juga mengubah tipenya menjadi boolean.
Mungkin ada situasi di mana + akan diinterpretasikan sebagai operator penggabungan dan bukan sebagai operator penjumlahan. Untuk menghindari hal ini, Anda harus menggunakan tanda gelombang: ~~. Operator ini setara dengan -n-1. Misalnya, ~15 sama dengan -16.
Penggunaan dua tanda gelombang berturut-turut akan meniadakan operasi karena - (- - n - 1) - 1 = n + 1 - 1 = n. Dengan kata lain, ~-16 sama dengan 15.
Mulai di ES7, Anda dapat menggunakan operator eksponensial ** sebagai singkatan dari pangkat. Ini jauh lebih cepat daripada menggunakan Math.pow(2, 3). Kelihatannya sederhana, tetapi poin ini termasuk dalam daftar teknik, karena tidak disebutkan di mana-mana.
console.log(2 ** 3); // Result: 8
Simbol ini berbeda dengan simbol ^ yang biasa digunakan untuk eksponensial. Namun dalam JavaScript ini adalah operator XOR.
Sebelum ES7, pintasan ** hanya dapat digunakan untuk pangkat basis 2 menggunakan operator shift kiri bitwise <<:
Math.pow(2, n);
2 << (n - 1);
2**n;
Misalnya, 2 << 3 = 16 setara dengan 2 ** 4 = 16.
Mengapung ke bilangan bulat
OPERASI / KONVERSI JENIS
Jika Anda perlu mengonversi float menjadi bilangan bulat, Anda dapat menggunakan Math.floor(), Math.ceil(), atau Math.round(). Namun ada cara yang lebih cepat, untuk ini kita menggunakan |, yaitu operator OR.
Perilaku | sangat bergantung pada apakah Anda berurusan dengan bilangan positif atau negatif, jadi metode ini hanya cocok jika Anda yakin dengan apa yang Anda lakukan.
n | 0 menghapus semuanya setelah pemisah desimal, memotong float menjadi bilangan bulat.
Anda bisa mendapatkan efek pembulatan yang sama menggunakan ~~. Setelah konversi paksa ke bilangan bulat, nilainya tetap tidak berubah.
Menghapus nomor tambahan
Operator OR dapat digunakan untuk menghapus sejumlah digit dari suatu nomor. Artinya kita tidak perlu mengonversi tipe seperti di sini:
let str = "1553";
Number(str.substring(0, str.length - 1));
Notasi panah ES6 dapat digunakan dalam metode kelas, dan pengikatan tersirat. Ini berarti Anda dapat mengucapkan selamat tinggal pada ekspresi berulang seperti this.myMethod = this.myMethod.bind(this)!