Nous avons déjà enregistré différentes façons de déterminer le type numérique en JavaScript. Cet article examinera comment déterminer le type entier (Integer).
JavaScript ne fait pas de distinction entre les nombres entiers et les nombres à virgule flottante. Tous les nombres sont représentés en interne dans un format à virgule flottante de 64 bits, qui est le même que le type double de Java. Cependant, les opérations réelles telles que l'indexation de tableaux et les opérations sur bits sont basées sur des entiers de 32 bits.
Méthode 1 : Utiliser l'opérateur reste pour déterminer
Tout entier est divisible par 1, c'est-à-dire que le reste est 0. Utilisez cette règle pour déterminer s’il s’agit d’un entier.
fonction estInteger(obj) {
Retourner obj%1 === 0
>
isInteger(3) // vrai
isInteger(3.3) // faux
Le résultat ci-dessus montre que cette fonction est très simple à utiliser, mais elle est impuissante pour les chaînes et certaines valeurs spéciales
estInteger('') // vrai
estInteger('3') // vrai
estInteger(true) // vrai
estInteger([]) // vrai
True est renvoyé pour les chaînes vides, les numéros de type chaîne, les booléens true et les tableaux vides, ce qui est vraiment inacceptable. Si vous êtes intéressé par les détails de conversion interne de ces types, veuillez vous référer à : Fausses valeurs étranges en JavaScript
Par conséquent, vous devez d'abord déterminer si l'objet est un nombre , par exemple en ajoutant un type de
fonction estInteger(obj) {
Type de retour d'obj === 'numéro' && obj%1 === 0
>
estInteger('') // faux
isInteger('3') // faux
estInteger(true) // faux
estInteger([]) // faux
Eh bien, c'est plus parfait.
2. Utilisez Math.round, Math.ceil, Math.floor pour juger
L'entier est toujours égal à lui-même après arrondi. Utilisez cette fonctionnalité pour déterminer s'il s'agit d'un entier, exemple Math.floor, comme suit
fonction estInteger(obj) {
Retour Math.floor(obj) === obj
>
isInteger(3) // vrai
estInteger(3.3) // faux
estInteger('') // faux
isInteger('3') // faux
estInteger(true) // faux
estInteger([]) // faux
Cela bloque directement les chaînes, true et [], et la quantité de code est inférieure à celle de la fonction précédente.
3. Juger par parseInt
fonction estInteger(obj) {
Retourner parseInt(obj, 10) === obj
>
isInteger(3) // vrai
estInteger(3.3) // faux
estInteger('') // faux
isInteger('3') // faux
estInteger(true) // faux
estInteger([]) // faux
Très bien, mais il y a un inconvénient
isInteger(1000000000000000000000) // faux
En fait, il a renvoyé false, ce qui est déraisonnable. La raison en est que parseInt force l'analyse du premier argument dans une chaîne avant d'analyser l'entier. Cette méthode de conversion de nombres en entiers n’est pas un bon choix.
4. Jugement à travers des opérations de bits
fonction estInteger(obj) {
Retour (obj | 0) === obj
>
isInteger(3) // vrai
estInteger(3.3) // faux
estInteger('') // faux
isInteger('3') // faux
estInteger(true) // faux
estInteger([]) // faux
Cette fonction est très bonne et très efficace. Mais il y a un défaut. Comme mentionné ci-dessus, les opérations sur les bits ne peuvent gérer que les nombres de 32 bits et ne peuvent rien faire avec les nombres dépassant 32 bits, comme .
isInteger(Math.pow(2, 32)) // Les nombres de plus de 32 chiffres renvoient faux
Bien sûr, la plupart du temps, nous n’utiliserons pas de chiffres aussi gros.
5. ES6 fournit Number.isInteger
Number.isInteger(3) // vrai
Number.isInteger(3.1) // faux
Number.isInteger('') // faux
Number.isInteger('3') // faux
Number.isInteger(true) // faux
Number.isInteger([]) // faux
Actuellement, les derniers Firefox et Chrome le prennent déjà en charge.