【问题标题】:Why is undefined not falsey in Array.prototype.filter?为什么 Array.prototype.filter 中的 undefined 不是 false?
【发布时间】:2017-12-01 17:01:11
【问题描述】:

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

【问题讨论】:

  • 确定没有错字吗?在您的帖子中,它显示为emp.gender = "F"。那不是检查
  • emp.gender = "F" 这总是正确的(“F”是真的)。您正在分配一个变量,您可能想要比较它。
  • 每次迭代的返回值为“F”,这是真的。
  • undefined 在哪里?我没有看到。
  • @ibrahimmahrir 啊,我的错。我认为谓词返回未定义,而不是 F。

标签: javascript


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-13
    • 2014-03-22
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 2022-07-16
    • 2023-01-24
    • 1970-01-01
    相关资源
    最近更新 更多