J'ai enregistré de nombreuses façons de juger un type de nombre en JavaScript. Cet article montre comment déterminer un type entier (entier).
En JavaScript, les nombres entiers et les nombres à virgule flottante ne sont pas distingués. Tous les nombres sont représentés au format à virgule flottante 64 bits, le même que le double type de Java. Mais dans les opérations réelles, telles que l'indexation des tableaux et les opérations de bit, sont basées sur des entiers 32 bits.
Méthode 1: Utilisez l'opérateur restant pour juger
Tout entier sera 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.
La copie de code est la suivante:
fonction isInteger (obj) {
retour obj% 1 === 0
}
isInteger (3) // Vrai
isInteger (3.3) // faux
La sortie ci-dessus montre que cette fonction est très utile, mais elle semble incompétente pour les chaînes et certaines valeurs spéciales.
La copie de code est la suivante:
isInteger ('') // vrai
isInteger ('3') // Vrai
isInteger (vrai) // vrai
isInteger ([]) // vrai
Il est vraiment difficile d'accepter ces chaînes vides, les numéros de type de chaîne, les tableaux Boolean True et les tableaux vides, tous renvoient vrai. Si vous êtes intéressé par les détails de ces types de conversion interne, veuillez vous référer à: Bizar Fake Values in JavaScript
Par conséquent, vous devez d'abord déterminer si l'objet est un nombre, comme l'ajout d'un type de
La copie de code est la suivante:
fonction isInteger (obj) {
RETOUR TYPE OF OBJ === 'NUMBRE' && obj% 1 === 0
}
isInteger ('') // faux
isInteger ('3') // faux
isInteger (vrai) // faux
isInteger ([]) // faux
Eh bien, c'est plus parfait.
2. Utilisez Math.round, Math.Ceil et Math.Floor pour faire des jugements
L'entier est toujours égal à vous-même. Utilisez cette fonctionnalité pour déterminer s'il s'agit d'un entier. L'exemple Math.Floor est le suivant
La copie de code est la suivante:
fonction isInteger (obj) {
return math.floor (obj) === obj
}
isInteger (3) // Vrai
isInteger (3.3) // faux
isInteger ('') // faux
isInteger ('3') // faux
isInteger (vrai) // faux
isInteger ([]) // faux
Cela bloque directement la chaîne, true, [], et la quantité de code est plus petite que la fonction précédente.
3. Jugement par Parseint
La copie de code est la suivante:
fonction isInteger (obj) {
RETOUR PARSEINT (OBJ, 10) === OBJ
}
isInteger (3) // Vrai
isInteger (3.3) // faux
isInteger ('') // faux
isInteger ('3') // faux
isInteger (vrai) // faux
isInteger ([]) // faux
Très bon, mais a aussi un inconvénient
La copie de code est la suivante:
isInteger (1000000000000000000000000) // faux
Il est en fait revenu faux, c'était déraisonnable. La raison en est que Parseint force le premier paramètre à être analysé dans une chaîne avant d'analyser l'entier. Cette méthode de conversion des nombres en entiers n'est pas un bon choix.
4. Jugement à travers les opérations de bit
La copie de code est la suivante:
fonction isInteger (obj) {
retour (obj | 0) === obj
}
isInteger (3) // Vrai
isInteger (3.3) // faux
isInteger ('') // faux
isInteger ('3') // faux
isInteger (vrai) // faux
isInteger ([]) // faux
Cette fonction est très bonne et a une grande efficacité. Mais il y a un défaut. Comme mentionné ci-dessus, les opérations de bit ne peuvent traiter les numéros que dans les 32 bits, et ils sont impuissants pour faire plus de 32 bits, tels que
La copie de code est la suivante:
isInteger (math.pow (2, 32)) // Les nombres supérieurs à 32 chiffres sont retournés faux
Bien sûr, la plupart du temps, nous n'utilisons pas un si grand nombre.
5. ES6 fournit le nombre.IsInteger
La copie de code est la suivante:
Number.IsInteger (3) // Vrai
Number.IsInteger (3.1) // Faux
Number.IsInteger ('') // False
Number.IsInteger ('3') // Faux
Number.IsInteger (true) // false
Number.IsInteger ([]) // False
Actuellement, les derniers Firefox et Chrome sont déjà pris en charge.