No entiendo por qué funciona este código, ¿alguien puede explicarme?
Si elimino esta parte del condicional && arr[i] el valor de arr[5] no se asume como un valor falso, pero si escribo esa parte del código ya asume arr[5] como un valor falso.
Puede ver el valor de arr[5] al final de la función.
function bouncer(arr) { let word = [] for (let i = 0; i < arr.length; i++) if (typeof arr[i] !== Boolean && arr[i]) { word.push(arr[i]) } return word; } console.log(bouncer([false, null, 0, NaN, undefined, ""]));Prueba este código si quieres comprobar si hay valores falsos
¡Déjame decirte que los valores falsos no requieren ser booleanos!
Por ejemplo, 0 es un valor falso, sin embargo, typeof(0) es un número.
La razón por la que su código devuelve una matriz vacía es la condición if, ¡está comprobando if typeof(arr[i]) !== Boolean && arr[i]
esta condición siempre será falsa ya que typeof devuelve una cadena y Boolean se considera como un objeto/constructor (que no es una cadena)
function bouncer(arr) { let word = [] for (let i = 0; i < arr.length; i++) if (arr[i]) { word.push(arr[i]) } return word; } console.log(bouncer([false, null, 0, NaN, undefined, ""]));tal vez puedas hacerlo más simple :-)
let arr = [false, null, 0, NaN, undefined, "", 111, "aaa"]; let x = arr.filter(i => (typeof i !== Boolean && i))