为什么在Array.prototype.filter中undefined不是假的?

时间:2017-12-01 17:01:12

标签: javascript

我在传递给过滤器的谓词中出错,得到了一个奇怪的结果。我当然应该写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");

我怀疑它与此有关,但我不完全确定如何:Why does "undefined equals false" return false?

1 个答案:

答案 0 :(得分:1)

您需要使用=====来比较值,而不是分配符号=。非空字符串是一个真值,因此结果包含所有元素,因为它始终返回"F"这是真实的(即,您将gender属性更新为"F"然后返回属性值为"F")。

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

参考:Which equals operator (== vs ===) should be used in JavaScript comparisons?