Jenis integer (integer) sering menyebabkan beberapa masalah aneh di JavaScript. Dalam spesifikasi ecmascript, mereka hanya ada dalam konsep:
Semua angka adalah angka titik mengambang, dan bilangan bulat tidak memiliki satu set angka tanpa desimal.
Di blog ini, saya akan menjelaskan cara memeriksa apakah nilai adalah bilangan bulat.
Ecmascript 5
Ada banyak cara yang dapat Anda gunakan di ES5. Terkadang, Anda mungkin ingin menggunakan metode Anda sendiri: fungsi IsInteger (x), yang mengembalikan true jika itu adalah integer, jika tidak mengembalikan false.
Mari kita lihat beberapa contoh.
Lewati Pemeriksaan Sisa
Anda dapat menggunakan operasi sisanya (%) dan menghitung sisanya dengan 1 untuk melihat apakah sisanya 0.
fungsi isInteger (x) {return x % 1 === 0;}Saya suka metode ini karena sangat sederhana dan efektif.
> IsInteger (17) True> IsInteger (17.13) Salah
Anda harus berhati -hati saat mengoperasikan operasi sisa, karena hasilnya tergantung pada tanda angka pertama. Jika positif, hasilnya positif; Kalau tidak, itu negatif.
> 3,5 % 10,5> -3,5 % 1-0,5
Kemudian, kita juga dapat memeriksa 0, yang sebenarnya bukan masalah. Tetapi masalahnya adalah: metode ini juga akan kembali benar untuk non-digit, karena % akan mengonversinya menjadi angka:
> isInteger ('') true> isInteger ('33') true> isInteger (false) true> isInteger (true) trueItu dapat diselesaikan dengan pemeriksaan tipe sederhana:
fungsi isInteger (x) {return (typeof x === 'number') && (x % 1 === 0);}Oleh Math.round () Jika angka dibulatkan dan masih memiliki nilai yang sama dengan yang sebelumnya, maka itu adalah bilangan bulat. Dalam JavaScript, Anda dapat memeriksanya melalui Math.round ():
fungsi isInteger (x) {return math.round (x) === x;}Metode ini juga bagus
> IsInteger (17) True> IsInteger (17.13) Salah
Itu juga dapat menilai non-numerik, karena math.round () selalu mengembalikan angka dan === Mengembalikan true hanya jika jenisnya sama.
> isInteger ('') falseJika Anda ingin membuat kode lebih jelas, Anda dapat menambahkan jenis pemeriksaan (yang kami lakukan di versi sebelumnya). Selain itu, math.floor () dan math.ceil () dapat bekerja seperti math.round (). Memeriksa operator bit melalui operasi bit menyediakan metode lain "pembulatan":
fungsi isInteger (x) {return (x | 0) === x;}Solusi ini (seperti operasi bit lainnya) memiliki satu kelemahan: tidak dapat menangani angka yang melebihi 32 bit.
> IsInteger (Math.Pow (2, 32)) Salah
Memeriksa parseInt () melalui parseInt () juga memberikan metode yang serupa dengan math.round () untuk mengubah angka menjadi bilangan bulat. Mari kita lihat mengapa metode ini bagus.
fungsi isInteger (x) {return parseInt (x, 10) === x;}Seperti solusi Math.round (), dapat menangani kasus non-numerik, tetapi juga tidak menangani semua bilangan bilangan bulat dengan benar:
> IsInteger (100000000000000000000000000) Salah
Mengapa? ParseInt () memaksa parameter pertama yang akan diuraikan ke dalam string sebelum mem -parsing integer. Oleh karena itu, menggunakan metode ini untuk mengubah angka menjadi bilangan bulat bukanlah pilihan yang baik.
> ParseInt (1000000000000000000000000, 10) 1> String (100000000000000000000000) '1E+21'
Sama seperti di atas, ParseInt () berhenti memproses pada 1 ketika parsing '1e+21', jadi ia mengembalikan 1. Ecmascript 6 untuk matematika () Lempar tambahan, ES6 menyediakan metode lain untuk mengubah angka menjadi bilangan bulat: math.trunc (). Fungsi ini menghilangkan bagian fraksional dari angka.
> Math.trunc (4.1) 4> Math.trunc (4.9) 4> Math.trunc (-4.1) -4> Math.trunc (-4.9) -4
Selain itu, ecmascript6 tidak perlu menangani tugas sepele yang memeriksa bilangan bulat, karena dilengkapi dengan nomor fungsi bawaan.isinteger ().