测试等于条件时使用下划线时的奇怪行为

strange behavior when using Underscore when testing equals condition

我在我的项目中使用 Underscore.js 时遇到了一个奇怪的行为。当我用 changes_summary === 2 过滤数组时,我得到了想要的结果,但是当我用 changes_summay === 0 过滤数组时,我没有得到任何输出。

代码如下:

var result={
   "data": [
     {
      "id": 956,
      "changes_summary": 2,
      "name": "Pradeep",
      "age": 32
     },
     {
      "id": 956,
      "changes_summary": 0,
      "name": "praveen",
      "age": 22
     }
  ]
}


var filtered = _.filter(result.data, function(obj){ 
    return (obj.changes_summary && obj.changes_summary === 2)
});
//working when comparing with changes_summary with 2 but not working when comparing with 0
console.log(filtered);

请让我知道哪里出错了。 Link 附加到 Jsfiddle:Jsfiddle

第一个测试 — obj.changes_summary — 当 属性 值为 0 时将失败,因为这是一个虚假值。如果您正在测试对象中是否存在 属性,您可以这样做:

return (("changes_summary" in obj) && obj.changes_summary === 0);