Los tipos enteros (enteros) a menudo causan algunos problemas extraños en JavaScript. En la especificación de Ecmascript, existen solo en el concepto:
Todos los números son números de puntos flotantes, y los enteros simplemente no tienen un conjunto de números sin decimales.
En este blog, explicaré cómo verificar si un valor es un entero.
Ecmascript 5
Hay muchas maneras de usar en ES5. A veces, es posible que desee usar su propio método: una función de IsInteger (x), que devuelve verdadero si es un entero, de lo contrario devuelve falso.
Echemos un vistazo a algunos ejemplos.
Pasar el cheque del resto
Puede usar la operación del resto (%) y calcular el resto por 1 para ver si el resto es 0.
función isinteger (x) {return x % 1 === 0;}Me gusta este método porque es muy simple y efectivo.
> IsInteger (17) Verdadero> IsInteger (17.13) Falso
Debe tener cuidado al operar operaciones restantes, porque el resultado depende del signo del primer número. Si es positivo, el resultado es positivo; de lo contrario es negativo.
> 3.5 % 10.5> -3.5 % 1-0.5
Entonces, también podemos verificar 0, que en realidad no es un problema. Pero el problema es: este método también devolverá verdadero para los no dígitos, porque el % lo convertirá a un número:
> isInteger ('') true> isInteger ('33') true> isInteger (false) true> isInteger (true) trueSe puede resolver mediante una verificación de tipo simple:
función isInteger (x) {return (typeof x === 'number') && (x % 1 === 0);}Por math.round () Si un número es redondeado y todavía tiene el mismo valor que el anterior, entonces es un entero. En JavaScript, puede verificarlo a través de Math.round ()::
función isInteger (x) {return math.round (x) === x;}Este método también es bueno
> IsInteger (17) Verdadero> IsInteger (17.13) Falso
También puede juzgar no numérico, porque Math.round () siempre devuelve números y === devuelve verdadero solo si el tipo es el mismo.
> isInteger ('') falsoSi desea que el código sea más claro, puede agregar comprobación de tipo (que es lo que hicimos en la versión anterior). Además, Math.floor () y Math.Ceil () pueden funcionar como Math.round (). Verificar los operadores de bit a través de las operaciones de bit proporciona otro método de "redondeo":
función isInteger (x) {return (x | 0) === x;}Esta solución (como otras operaciones de bit) tiene un inconveniente: no puede manejar números que excedan los 32 bits.
> IsInteger (Math.Pow (2, 32)) Falso
Comprobar parseInt () a través de parseInt () también proporciona un método similar a math.round () para convertir los números en enteros. Veamos por qué este método es bueno.
función isinteger (x) {return parseint (x, 10) === x;}Al igual que la solución Math.round (), puede manejar casos no numéricos, pero tampoco maneja todos los números enteros correctamente:
> IsInteger (100000000000000000000000000) FALSO
¿Por qué? parseInt () obliga al primer parámetro a analizarse en una cadena antes de analizar un entero. Por lo tanto, usar este método para convertir números en enteros no es una buena opción.
> Parseint (100000000000000000000000000, 10) 1> cadena (10000000000000000000000000) '1E+21'
Al igual que anteriormente, parseInt () deja de procesar en 1 cuando se analiza '1e+21', por lo que devuelve 1. Ecmascript 6 para Math.round () Showing Addition, ES6 proporciona otro método para convertir números en enteros: Math.trunc (). Esta función elimina la parte fraccional del número.
> Math.trunc (4.1) 4> Math.trunc (4.9) 4> Math.trunc (-4.1) -4> Math.trunc (-4.9) -4
Además, ECMAScript6 no necesita lidiar con tareas triviales que verifiquen enteros, ya que viene con una función incorporada .isintager ().