Méthode de jugement : 1. Utilisez l'instruction "value%1===0" ; 2. Utilisez l'instruction "Math.floor(value)===value" ; 3. Utilisez "parseInt(value, 10) === value" ; 4. Utilisez l'instruction "(value|0)=== value" ; 5. Utilisez l'instruction "Number.isInteger(value)".
L'environnement d'exploitation de ce tutoriel : système Windows 7, JavaScript version 1.8.5, ordinateur Dell G3.
JavaScript ne fait pas de distinction entre les entiers et les nombres à virgule flottante. Tous les nombres sont représentés en interne au format à virgule flottante 64 bits, identique au type double de Java. Cependant, les opérations réelles telles que l'indexation de tableaux et les opérations sur les bits sont basées sur des entiers de 32 bits. Alors comment déterminer s’il s’agit d’un type entier (Integer) ?
Méthode 1. Utilisez l'opérateur reste pour déterminer
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.
function isInteger(obj) { return obj%1 === 0 } isInteger(3) // true isInteger(3.3) // false
Il ressort du résultat ci-dessus que cette fonction est très utile, mais elle est insuffisante pour les chaînes et certaines valeurs spéciales
isInteger('') // true isInteger('3') // true isInteger(true) // true isInteger([]) // true
Pour les chaînes vides, les nombres de type chaîne, booléen vrai. , et vide Les tableaux ont tous renvoyé vrai, 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 à : Valeurs fausses é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
function isInteger(obj) { return typeof obj === 'number' && obj%1 === 0 } isInteger('') // false isInteger('3') // false isInteger(true) // false isInteger([]) // false
Bon, comme ça, c'est relativement parfait.
Méthode 2 : Utilisez Math.floor pour déterminer si
l'entier est toujours égal à lui-même après arrondi. Utilisez cette fonctionnalité pour déterminer s'il s'agit d'un entier. L'exemple Math.floor est le suivant :
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
Cela masque directement les chaînes, true et [], et la quantité de code est inférieure à celle de la fonction précédente.
La troisième méthode, jugez par 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
est très bonne, mais il y a aussi un inconvénient :
isInteger(1000000000000000000000) // false
renvoie en fait faux, 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.
Méthode 4. Jugement par opérations sur bits
function isInteger(obj) { return (obj | 0) === obj } isInteger(3) // true isInteger(3.3) // false isInteger('') // false isInteger('3') // false isInteger(true) // false isInteger([]) // false
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 des nombres compris entre 32 bits et ne peuvent rien faire avec plus de 32 bits, comme
isInteger(Math.pow(2, 32)) // 32位以上的数字返回false了
Bien sûr, la plupart du temps, nous n'utiliserons pas. de si grands nombres.
Méthode 5. ES6 fournit 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
Actuellement, les derniers Firefox et Chrome la prennent déjà en charge.
Remarque : Chacune de ces cinq méthodes a ses propres avantages et inconvénients. Vous pouvez les comparer soigneusement et choisir la meilleure à utiliser.
[Apprentissage recommandé : Tutoriel JavaScript avancé]
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!