Kami sebelum ini telah merekodkan pelbagai cara untuk menentukan jenis angka dalam JavaScript Artikel ini akan melihat cara untuk menentukan jenis integer (Integer).
JavaScript tidak membezakan antara integer dan nombor titik terapung Semua nombor diwakili secara dalaman dalam format titik terapung 64-bit, yang sama dengan jenis berganda Java. Walau bagaimanapun, operasi sebenar seperti pengindeksan tatasusunan dan operasi bit adalah berdasarkan integer 32-bit.
Kaedah 1: Gunakan operator selebihnya untuk menentukan
Sebarang integer boleh dibahagi dengan 1, iaitu bakinya ialah 0. Gunakan peraturan ini untuk menentukan sama ada ia adalah integer.
fungsi ialahInteger(obj) {
Kembalikan obj%1 === 0
}
isInteger(3) // benar
isInteger(3.3) // false
Output di atas menunjukkan bahawa fungsi ini sangat mudah digunakan, tetapi ia tidak berkuasa untuk rentetan dan beberapa nilai istimewa
isInteger('') // benar
isInteger('3') // benar
isInteger(true) // true
isInteger([]) // benar
True dikembalikan untuk rentetan kosong, nombor jenis rentetan, Boolean true dan tatasusunan kosong, yang sememangnya tidak boleh diterima. Jika anda berminat dengan butiran penukaran dalaman jenis ini, sila rujuk: Nilai palsu yang pelik dalam JavaScript
Oleh itu, anda perlu terlebih dahulu menentukan sama ada objek itu ialah nombor , seperti menambah jenis
fungsi ialahInteger(obj) {
Kembalikan jenis obj === 'nombor' && obj%1 === 0
}
isInteger('') // palsu
isInteger('3') // false
isInteger(true) // false
isInteger([]) // false
Nah, ini lebih sempurna.
2. Gunakan Math.round, Math.ceil, Math.floor untuk menilai
Integer masih sama dengan dirinya selepas dibundarkan. Gunakan ciri ini untuk menentukan sama ada ia adalah integer, contoh Math.floor, seperti berikut
fungsi ialahInteger(obj) {
Kembalikan Math.floor(obj) === obj
}
isInteger(3) // benar
isInteger(3.3) // false
isInteger('') // palsu
isInteger('3') // false
isInteger(true) // false
isInteger([]) // false
Ini secara langsung menyekat rentetan, benar dan [], dan jumlah kod adalah kurang daripada fungsi sebelumnya.
3. Hakim mengikut parseInt
fungsi ialahInteger(obj) {
Kembalikan parseInt(obj, 10) === obj
}
isInteger(3) // benar
isInteger(3.3) // false
isInteger('') // palsu
isInteger('3') // false
isInteger(true) // false
isInteger([]) // false
Sangat bagus, tetapi ada kelemahan
isInteger(1000000000000000000000) // palsu
Ia sebenarnya mengembalikan palsu, yang tidak munasabah. Sebabnya ialah parseInt memaksa hujah pertama dihuraikan ke dalam rentetan sebelum menghuraikan integer. Kaedah menukar nombor kepada integer ini bukanlah pilihan yang baik.
4. Penghakiman melalui operasi bit
fungsi ialahInteger(obj) {
Kembali (obj | 0) === obj
}
isInteger(3) // benar
isInteger(3.3) // false
isInteger('') // palsu
isInteger('3') // false
isInteger(true) // false
isInteger([]) // false
Fungsi ini sangat baik dan sangat cekap. Tetapi terdapat kecacatan Seperti yang dinyatakan di atas, operasi bit hanya boleh mengendalikan nombor dalam 32 bit, dan tidak boleh melakukan apa-apa dengan nombor melebihi 32 bit, seperti
isInteger(Math.pow(2, 32)) // Nombor dengan lebih daripada 32 digit mengembalikan palsu
Sudah tentu, kebanyakan masa kita tidak akan menggunakan nombor yang besar.
5. ES6 menyediakan Number.isInteger
Number.isInteger(3) // benar
Number.isInteger(3.1) // palsu
Number.isInteger('') // palsu
Number.isInteger('3') // palsu
Number.isInteger(true) // false
Number.isInteger([]) // palsu
Pada masa ini, Firefox dan Chrome terkini sudah pun menyokongnya.