Les types entiers (entier) causent souvent des problèmes étranges en JavaScript. Dans la spécification ECMAScript, ils n'existent que dans le concept:
Tous les nombres sont des numéros de points flottants et les entiers n'ont tout simplement pas un ensemble de nombres sans décimales.
Dans ce blog, je vais expliquer comment vérifier si une valeur est un entier.
Ecmascript 5
Il existe de nombreuses façons d'utiliser dans ES5. Parfois, vous voudrez peut-être utiliser votre propre méthode: une fonction d'IsInteger (x), qui renvoie True s'il s'agit d'un entier, sinon renvoie FAUX.
Jetons un coup d'œil à quelques exemples.
Passer le chèque reste
Vous pouvez utiliser l'opération de reste (%) et calculer le reste par 1 pour voir si le reste est 0.
fonction isInteger (x) {return x% 1 === 0;}J'aime cette méthode car elle est très simple et efficace.
> IsInteger (17) Vrai> IsInteger (17.13) Faux
Vous devez être prudent lors de l'exploitation des opérations restantes, car le résultat dépend du signe du premier numéro. Si c'est positif, le résultat est positif; Sinon, c'est négatif.
> 3,5% 10,5> -3,5% 1-0,5
Ensuite, nous pouvons également vérifier 0, ce qui n'est pas réellement un problème. Mais le problème est: cette méthode reviendra également vrai pour les non-chiffres, car% le convertira en un nombre:
> isInteger ('') true> isInteger ('33') true> IsInteger (false) true> IsInteger (true) trueIl peut être résolu par une vérification simple:
Fonction isInteger (x) {return (typeof x === 'nombre') && (x% 1 === 0);}Par math.round () Si un nombre est arrondi et a toujours la même valeur que la précédente, alors c'est un entier. Dans JavaScript, vous pouvez le vérifier via math.round ():
fonction isInteger (x) {return math.round (x) === x;}Cette méthode est également bonne
> IsInteger (17) Vrai> IsInteger (17.13) Faux
Il peut également juger non nucère, car math.round () renvoie toujours les nombres et === ne renvoie que si le type est le même.
> isInteger ('') fauxSi vous souhaitez rendre le code plus clair, vous pouvez ajouter la vérification de type (c'est ce que nous avons fait dans la version précédente). De plus, math.floor () et math.ceil () peuvent fonctionner comme math.round (). La vérification des opérateurs de bit via les opérations de bit fournit une autre méthode de "arrondissement":
fonction isInteger (x) {return (x | 0) === x;}Cette solution (comme les autres opérations de bits) présente un inconvénient: il ne peut pas gérer les nombres qui dépassent 32 bits.
> isInteger (math.pow (2, 32)) false
La vérification de ParseInt () via ParseInt () fournit également une méthode similaire à Math.round () pour convertir les nombres en entiers. Voyons pourquoi cette méthode est bonne.
fonction isInteger (x) {return parseInt (x, 10) === x;}Comme la solution math.round (), il peut gérer les cas non numériques, mais il ne gère pas non plus correctement tous les nombres entiers:
> ISInteger (100000000000000000000000000) FALSE
Pourquoi? parseInt () force le premier paramètre à être analysé dans une chaîne avant d'analyser un entier. Par conséquent, l'utilisation de cette méthode pour convertir les nombres en entiers n'est pas un bon choix.
> ParseInt (100000000000000000000000000, 10) 1> String (10000000000000000000000000) '1E + 21'
Tout comme ci-dessus, ParseInt () arrête le traitement à 1 lors de l'analyse de «1e + 21», donc il renvoie 1. Ecmascript 6 pour math.round () ajout de lancer, ES6 fournit une autre méthode pour convertir les nombres en entiers: math.trunc (). Cette fonction supprime la partie fractionnée du nombre.
> Math.trunc (4.1) 4> math.trunc (4.9) 4> math.trunc (-4.1) -4> math.trunc (-4.9) -4
De plus, Ecmascript6 n'a pas besoin de gérer des tâches triviales qui vérifient les entiers, car il est livré avec un numéro de fonction intégré.IsInteger ().