Quiero obtener el primer valor numérico de valores con número o rango indefinido.
Obviamente, esto falla para 0, que es falso. ¿Cuál es la expresión lógica para devolver esto?
type Nomber = number | undefined function a_or_b_or_c_number_value_including_zero(a: Nomber, b: Nomber, c: Nomber) { return (a || b || c) } const test = (a: Nomber, b: Nomber, c: Nomber, expected: any) => { let got = a_or_b_or_c_number_value_including_zero(a, b, c) if (got !== expected) { console.log([a, b, c], 'fail', got, expected) } } test(1, 2, 3, 1) test(undefined, 1, 2, 1) test(0, 1, 2, 0) test(undefined, 0, 2, 0)Puede usar el operador coalescente nulo para verificarlo.
Según MDN :
El operador coalescente nulo (
??) es un operador lógico que devuelve su operando del lado derecho cuando su operando del lado izquierdo esnulloundefinedy, de lo contrario, devuelve su operando del lado izquierdo.
Esto se puede usar en su código como se muestra a continuación.
function a_or_b_or_c_number_value_including_zero(a: Nomber, b: Nomber, c: Nomber) { return (a ?? b ?? c); // Modified } Esto hará que el código funcione de la manera que desea, lo que no hará que 0 sea igual a false .
Así es como funciona el código.
| Código | Descripción |
|---|---|
a ?? | Si a no es null o undefined , use a . |
b ?? c | Si b es null o undefined , use c , de lo contrario, use b . |
En conclusión, el operador coalescente nulo es una característica útil para no hacer que 0 y "" sean iguales a false (mientras que || evalúa esos valores como false ).
Puede usar el operador coalescente nulo (??) para solucionar el error 0 por ser falso.