Lima cara js untuk menentukan sama ada ia adalah kemahiran javascript type_integer

WBOY
Lepaskan: 2016-05-16 15:28:06
asal
1267 orang telah melayarinya

Artikel ini melihat cara menentukan jenis integer (Integer JavaScript tidak membezakan antara integer dan nombor titik terapung Semua nombor secara dalaman diwakili 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 baki untuk menentukan
Sebarang integer boleh dibahagi dengan 1, iaitu bakinya ialah 0. Gunakan peraturan ini untuk menentukan sama ada ia adalah integer.

function isInteger(obj) {
 return obj%1 === 0
}
isInteger(3) // true
isInteger(3.3) // false 
Salin selepas log masuk

Output di atas menunjukkan bahawa fungsi ini sangat mudah digunakan, tetapi ia tidak berkuasa untuk rentetan dan beberapa nilai istimewa

isInteger('') // true
isInteger('3') // true
isInteger(true) // true
isInteger([]) // true
Salin selepas log masuk

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

function isInteger(obj) {
 return typeof obj === 'number' && obj%1 === 0
}
isInteger('') // false
isInteger('3') // false
isInteger(true) // false
isInteger([]) // false
Salin selepas log masuk

Nah, ini lebih sempurna.
Kaedah 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

function isInteger(obj) {
 return Math.floor(obj) === obj
}
isInteger(3) // true
isInteger(3.3) // false
isInteger('') // false
isInteger('3') // false
isInteger(true) // false
isInteger([]) // false
Salin selepas log masuk

Ini menyekat terus rentetan, benar dan [], dan jumlah kod adalah kurang daripada fungsi sebelumnya.
Kaedah 3, hakim mengikut parseInt

function isInteger(obj) {
 return parseInt(obj, 10) === obj
}
isInteger(3) // true
isInteger(3.3) // false
isInteger('') // false
isInteger('3') // false
isInteger(true) // false
isInteger([]) // false
Salin selepas log masuk

Sangat bagus, tetapi ada kelemahan

isInteger(1000000000000000000000) // false
Salin selepas log masuk

Ia sebenarnya dikembalikan 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.
Kaedah 4: Tentukan melalui operasi bit

function isInteger(obj) {
 return (obj | 0) === obj
}
isInteger(3) // true
isInteger(3.3) // false
isInteger('') // false
isInteger('3') // false
isInteger(true) // false
isInteger([]) // false
Salin selepas log masuk

Fungsi ini sangat bagus 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

Salin kod Kod adalah seperti berikut:
isInteger(Math.pow(2, 32)) // Nombor lebih daripada 32 digit Dikembalikan palsu

Sudah tentu, kebanyakan masa kita tidak akan menggunakan nombor yang besar.
Kaedah 5. ES6 menyediakan Number.isInteger

Number.isInteger(3) // true
Number.isInteger(3.1) // false
Number.isInteger('') // false
Number.isInteger('3') // false
Number.isInteger(true) // false
Number.isInteger([]) // false
Salin selepas log masuk

Pada masa ini, Firefox dan Chrome terkini sudah pun menyokongnya.

Di atas ialah lima cara untuk menentukan sama ada ia adalah jenis integer Setiap satu daripada lima cara ini mempunyai kelebihan dan kekurangannya sendiri. Anda boleh membandingkannya dengan teliti dan memilih yang terbaik untuk digunakan.

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan