javascript中过滤方法的语法结构决定结果

Syntax structure of filter method in javascript determines result

我正在处理一个编码问题,我遇到了一些让我陷入困境的事情(没有双关语意)。这很简单,但我希望有更多经验的人能够清楚地说明。

我试图这样解决它,但它不起作用(我知道没有必要检查零,但我只是四处乱逛,发现了这个“怪癖”)

 const filter_list = (l) => {
      return l.filter(item => {
        if(typeof item === 'number' || item === 0) {
          return item;
      }
   })
 }

它没有通过测试,但是当它这样写时,它通过了所有测试:

const filter_list = (l) => l.filter(item => typeof item === 'number' || item === 0);

第二个版本通过测试的原因是什么?语法上有差异,但逻辑对我来说似乎是一样的。

逻辑不一样。在第一个版本中有 return item;,在第二个版本中没有 return item。第二个版本 return 是条件结果。

第二个版本相当于:

const filter_list = (l) => {
  return l.filter(item => {
    return typeof item === 'number' || item === 0;
  })
}

如果要缩写第一个函数,则为:

const filter_list = (l) => l.filter(item => typeof item === 'number' || item === 0 ? item : undefined);

你的条件逻辑也没有多大意义。这对所有数字都是正确的,所以添加 || item === 0 不会改变结果。我怀疑你的意思是 &&。但是由于您使用的是严格相等,因此无需测试类型——只有一个数字可以严格等于 0.