Почему undefined не является ложным в Array.prototype.filter?

1

Я сделал ошибку в предикате, который я передал фильму, и получил любопытный результат. Я, конечно, должен был написать emp.gender === "F". Тем не менее, учитывая, что undefined является ложным, я ожидал, что femaleEmployees будет пустым массивом. Однако он включает в себя все элементы исходного массива.

var employees = [
  { name: "bob", gender: "M" },
  { name: "lisa", gender: "F" },
  { name: "vera", gender: "F" }
];
var femaleEmployees = employees.filter(emp => emp.gender = "F");

Я подозреваю, что это имеет какое-то отношение к этому, но я не совсем уверен, как: Почему "undefined equals false" возвращает false?

  • 0
    уверен, что у вас нет опечатки там? В вашем посте написано emp.gender = "F" . Это не проверка
  • 0
    emp.gender = "F" , это всегда так ("F" - правда). Вы присваиваете переменную, вы, вероятно, хотите сравнить ее.
Показать ещё 3 комментария
Теги:

1 ответ

1

Вы должны использовать == или === для сравнения значений вместо назначения символа =. Непустая строка является истинным значением, поэтому результат включает в себя все элементы, поскольку он всегда возвращает "F" который является правдивым (т.е. Вы обновляете свойство gender как "F" а затем возвращаете значение свойства, которое равно "F"),

var femaleEmployees = employees.filter(emp => emp.gender === "F");

Refer: Какой оператор equals (== vs ===) должен использоваться в сравнении JavaScript?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню