Проблема в том, что NaN !== NaN
:
console.log(NaN === NaN);
(что имеет смысл, потому что NaN
это просто заполнитель для того места, где можно ожидать числа, но числовое значение не может бытьвычисляется - например, 0 / 0
(NaN
) !== ('foo' * 3)
(NaN
))
Вместо этого вы можете использовать Number.isNaN
, который проверит, является ли переданное значение Number
иNaN
.
console.log(Number.isNaN(NaN));
function bouncer(arr) {
let truthyArray = [];
let falsyArray = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] == false || arr[i] === null || Number.isNaN(arr[i]) || arr[i] === undefined) {
falsyArray.push(arr[i]);
} else {
truthyArray.push(arr[i]);
}
}
return truthyArray;
}
console.log(bouncer([false, null, 0, NaN, undefined, ""]));
Обязательно используйте Number.isNaN
, а не просто isNaN
, что нежелательно исключит истинные не числа.