Давайте пройдемся по ним, но сначала нам нужно взглянуть на определение истины / фальши
Из Документы MDN : В JavaScript истинное значение - это значение, которое считается истинным, когда встречается в логическом контексте. Все значения являются достоверными, если они не определены как ложные (т. Е. За исключением false, 0, "", null, undefined и NaN).
Ваш первый пример:
if((val===0)){
return val;
}
Первый возвращает только нули, и вы возвращаете эти нули. Ноль - это ложь, поэтому они исключены.
Нет возврата для других значений, а функция без явного оператора return всегда возвращает undefined ... что неверно.
Таким образом, оба условия возвращают ложь, и результатом является пустой массив
Второй пример
if(!(val===0)){
return val;
}
Возвратитесь за что-либо кроме нуля и верните значение.
Все ненулевые числа являются правдивыми, поэтому вы получаете все из них в своем массиве.
Нули исключаются из-за отсутствия явного возврата, возвращающего неопределенное значение снова
Как отфильтровать, чтобы получить ненулевые значения с правильным значением true / false?
return val !== 0;