Objek Math pada JavaScript adalah sabuk utilitas yang sunyi bagi bahasa ini. Anda tidak pernah menginstansiasinya. Anda tidak pernah mengimpornya. Ia sekadar ada di setiap runtime, siap menangani segalanya mulai dari membulatkan nilai piksel hingga menghasilkan lemparan dadu acak. Karena Math adalah objek statis, setiap metode dan propertinya menempel langsung pada namespace. Anda menulis Math.PI, bukan new Math().PI. Pilihan desain tersebut menjaga segalanya tetap sederhana, tetapi itu juga berarti objek ini memiliki beberapa "sisi tajam" yang perlu dipahami sebelum Anda mengandalkannya untuk logika produksi.
Objek Statis Tanpa Konstruktor
Sebagian besar objek bawaan JavaScript mengharuskan Anda untuk membuat instansi. Anda memanggil new Date() atau new Array(). Math menolak hal itu. Ia dirancang sebagai namespace dari fungsi dan konstanta terkait yang beroperasi pada tipe Number primitif. Panggil Math.sqrt(16) dan Anda akan mendapatkan 4. Coba gunakan kata kunci new dan engine akan melempar TypeError. Pola ini menjaga memori tetap bersih dan menandakan bahwa Math murni bersifat fungsional. Ia menerima input, mengembalikan output, dan tidak mengubah apa pun.
Ada satu batasan ketat yang perlu diingat: Math bekerja dengan angka IEEE 754 standar. Ia tidak bekerja dengan BigInt. Masukkan BigInt ke dalam Math.round() atau Math.abs() dan Anda akan mendapatkan TypeError. Jika aplikasi Anda berurusan dengan integer 64-bit atau lebih besar, Anda perlu mengonversinya ke bawah atau menangani aritmatikanya dengan operator BigInt asli sebagai gantinya.
Konstanta yang Benar-benar Anda Gunakan
Objek Math menyediakan beberapa konstanta numerik yang menyelamatkan Anda dari penulisan angka ajaib (magic numbers) secara manual.
Math.PIadalah 3.14159... yang sudah tidak asing lagi, sangat penting untuk apa pun yang melibatkan lingkaran, trigonometri, atau konversi derajat ke radian.Math.Eadalah bilangan Euler, sekitar 2.718. Ia muncul dalam kurva pertumbuhan eksponensial, perhitungan bunga majemuk, dan skala logaritmik.Math.SQRT2adalah akar kuadrat dari dua, sekitar 1.414. Ini berguna saat Anda membutuhkan diagonal sebuah persegi atau ingin menormalisasi vektor dalam geometri sederhana.Math.LN2adalah logaritma natural dari 2, sekitar 0.693. Anda akan melihat ini dalam algoritma yang berurusan dengan pohon biner, entropi informasi, atau analisis kompleksitas waktu yang melibatkan matematika log-base-2.
Nilai-nilai ini adalah float presisi ganda sepenuhnya. Karena mereka adalah properti dan bukan metode, Anda mengaksesnya tanpa tanda kurung.
Pembulatan, Tanda, dan Nilai Absolut
Tugas Math yang paling umum melibatkan perapian sebuah angka. JavaScript memberi Anda empat metode pembulatan, dan mereka tidak berperilaku identik, terutama setelah Anda keluar dari wilayah angka positif.
Math.abs(x) mengembalikan magnitudo sebuah angka. Masukkan -42 dan Anda akan mendapatkan 42. Ini berguna saat Anda lebih peduli pada jarak daripada arah. Pikirkan tentang membandingkan timestamp, menghitung delta drag dalam UI, atau memeriksa apakah sebuah tebakan berada dalam margin kesalahan.
Math.round(x) adalah pembulat standar sekolah dasar. Ia mengambil integer terdekat, membulatkan nilai setengah (0.5) ke atas ke integer positif berikutnya. Jadi 4.4 menjadi 4, dan 4.5 menjadi 5.
Math.ceil(x) selalu membulatkan ke atas ke integer berikutnya. 4.1 menjadi 5, dan -4.9 menjadi -4. Hal terakhir ini sering mengejutkan orang. Karena -4 lebih besar dari -4.9 pada garis bilangan, ceiling bergerak menuju nol untuk angka negatif.
Math.floor(x) adalah kebalikannya. Ia selalu membulatkan ke bawah. 4.9 menjadi 4, dan -4.1 menjadi -5. Jika Anda melakukan paginasi hasil pencarian atau mengalokasikan blok memori berukuran tetap, floor biasanya adalah yang Anda inginkan.
Math.trunc(x) menghapus bagian desimal sepenuhnya, hanya menyisakan bagian integer. Efeknya, ia bergerak menuju nol terlepas dari tandanya. 4.9 menjadi 4, dan -4.9 menjadi -4. Jika Anda memindahkan logika dari bahasa yang melakukan casting float ke int dengan cara pemotongan (truncating), ini adalah teman Anda.
Terakhir, Math.sign(x) memberi tahu Anda di sisi mana dari nol sebuah nilai berada. Ia mengembalikan 1 untuk positif, -1 untuk negatif, 0 untuk positif nol, -0 untuk negatif nol, dan NaN untuk apa pun yang bukan angka. Ini adalah cara ringkas untuk melakukan percabangan berdasarkan arah tanpa harus menulis rantai if-else.
Menghasilkan Angka Acak
Math.random() menghasilkan float pseudo-acak dari 0 (inklusif) hingga 1 (eksklusif). Ini tidak aman secara kriptografi, jadi jangan menggunakannya untuk pembuatan kata sandi, pembuatan token, atau apa pun yang melibatkan uang sungguhan.
