Maison >interface Web >js tutoriel >Résumé de diverses méthodes pour juger des entiers dans les compétences JavaScript_javascript

Résumé de diverses méthodes pour juger des entiers dans les compétences JavaScript_javascript

WBOY
WBOYoriginal
2016-05-16 16:32:101391parcourir

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.

Copier le code Le code est le suivant :

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

Copier le code Le code est le suivant :

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

Copier le code Le code est le suivant :

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

Copier le code Le code est le suivant :

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

Copier le code Le code est le suivant :

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
Copier le code Le code est le suivant :

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

Copier le code Le code est le suivant :

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 .

Copier le code Le code est le suivant :

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

Copier le code Le code est le suivant :

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.

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