En Typecript, esto muestra un error que dice que isNaN solo acepta valores numéricos
isNaN('9BX46B6A')
y esto devuelve falso porque se parseFloat('9BX46B6A')
evalúa como9
isNaN(parseFloat('9BX46B6A'))
Todavía puedo ejecutar con el error que aparece en Visual Studio, pero me gustaría hacerlo de la manera correcta.
Actualmente, he escrito esta función modificada:
static isNaNModified = (inputStr: string) => {
var numericRepr = parseFloat(inputStr);
return isNaN(numericRepr) || numericRepr.toString().length != inputStr.length;
}
typescript
user3509546
fuente
fuente
Respuestas:
La forma de convertir una cadena en un número es con
Number
, noparseFloat
.También puede usar el operador unario plus si le gusta la taquigrafía:
Tenga cuidado al verificar contra NaN (el operador
===
y!==
no trabaje como se esperabaNaN
). Utilizar:fuente
Number
arribaparseInt
oparseFloat
?Number('')
da 0 mientrasparseInt('')
da,NaN
que está más en línea con lo que espero.parseInt('9BX9')
(yparseFloat('9BX9')
) volverá9
, noNaN
. Si no desea la conversión de una cadena vacía a 0, primero compruebe explícitamente la cadena vacía.isNaN(Number(what_ever))
lugar deNumber(what_ever) === Nan
.Number
no es una cosa TypeScript, es una función de constructor EcmaScript incorporada que acepta un valor y devuelve un número primitivo cuando se llama como una función en lugar de un constructor.Actualización 2
Este método ya no está disponible en rxjs v6
Estoy resuelto mediante el uso de la isNumeric operador de rxjs biblioteca (importación rxjs / util / isNumeric
Actualizar
import { isNumeric } from 'rxjs/util/isNumeric';
. . .
fuente
fuente
Respuesta simple: (ver en blanco y nulo)
https://codepen.io/CQCoder/pen/zYGEjxd?editors=1111
fuente
Elegiría una solución existente y ya probada. Por ejemplo, esto de rxjs en mecanografiado:
rxjs / isNumeric.ts
Sin la función rxjs isArray () y con tipificaciones simples:
Siempre debe probar tales funciones con sus casos de uso. Si tiene tipos de valores especiales, esta función puede no ser su solución. Puedes probar la función aquí.
Los resultados son:
Como puede ver, debe tener cuidado si usa esta función con enumeraciones.
fuente
La mayoría de las veces el valor que queremos verificar es una cadena o un número, así que aquí está la función que uso:
Pruebas de códigos y cajas .
fuente
Puedes usar la
Number.isFinite()
función:Nota: hay una diferencia significativa entre la función global
isFinite()
y la últimaNumber.isFinite()
. En el caso de los primeros, se realiza la coerción de cuerdas,isFinite('0') === true
mientras que mientrasNumber.isFinite('0') === false
.Además, tenga en cuenta que esto no está disponible en IE!
fuente
Para números completos (no flotantes) en Angular puede usar:
if (Number.isInteger(yourVariable)) { ... }
fuente
Number.isInteger
solo te dice siyourVariable
, que ya es unnumber
tipo, es un número entero. No funciona con cuerdas. Entonces,Number.isInteger(Number(yourVariable))
podría hacer el truco.Si una cadena se puede analizar como un número es una cuestión de tiempo de ejecución. TypeScript no admite este caso de uso, ya que se centra en la seguridad del tiempo de compilación (no en tiempo de ejecución).
fuente