Estoy validando mi tiempo de esta manera.
if ( timeInMins != 0 && timeInMins != "0" && timeInMins != undefined && timeInMins != "undefined" && timeInMins != null && timeInMins != "" && !isNaN(timeInMins) ) { timeInMinsCumulative += parseFloat(timeInMins); }
¿Hay alguna forma de convertir este feo if-check en un código sofisticado?
Esto utiliza el comportamiento de coerción de JavaScript y el operador lógico AND para simplificar su código. Lo siguiente es casi equivalente a su código, pero también protegerá contra los argumentos false
y 0n
.
if (timeInMins && timeInMins !== '0' && timeInMins !== 'undefined') { // whatever }
Preguntas para ti: ¿realmente esperas que te pasen la cadena 'undefined'
? ¿Por qué desea protegerse contra el envío de '0'
a parseFloat
? ¿Estás seguro de que parseInt
no es lo que quieres?
Hay 6 valores falsos en javascript: undefined
, null
, NaN
, 0
, ""
(cadena vacía) y false
, por supuesto.
Entonces, puedes escribir
if (timeInMins && timeInMin !== '0') { timeInMinsCumulative += parseFloat(timeInMins); }
Parece que desea verificar si timeInMins
es un tipo de Number
preciso o no.
function isValidNumber(num) { return typeof num === "number" && !isNaN(num); } console.log(isValidNumber("")); console.log(isValidNumber(undefined)); console.log(isValidNumber(NaN)); console.log(isValidNumber("undefined")); console.log(isValidNumber(true)); console.log(isValidNumber(false)); console.log(isValidNumber(0)); console.log(isValidNumber("0")); console.log(isValidNumber(1.234));