Maison >interface Web >js tutoriel >Comment déterminer si une valeur est un entier en javascript

Comment déterminer si une valeur est un entier en javascript

青灯夜游
青灯夜游original
2021-04-26 16:16:313112parcourir

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)".

Comment déterminer si une valeur est un entier en javascript

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn