Javascript 为什么赢了';if语句返回boolean和object类型的值吗?

Javascript 为什么赢了';if语句返回boolean和object类型的值吗?,javascript,arrays,regex,typeof,Javascript,Arrays,Regex,Typeof,我很好奇为什么filter方法中的else if语句不返回任何内容: var moveZeros = function (arr) { const nonZeros = arr.filter(value => { if (value !== 0) return value else if (typeof value === 'boolean') return value else if (typeof value === 'object') return val

我很好奇为什么filter方法中的else if语句不返回任何内容:

var moveZeros = function (arr) {
  const nonZeros = arr.filter(value => {
    if (value !== 0) return value
    else if (typeof value === 'boolean') return value
    else if (typeof value === 'object') return value
  })

  const zeros = arr.toString().match(/0/g).map(Number)

  const newArr = nonZeros.concat(zeros) 

  return newArr
}
此外,我还想知道为什么我在尝试从数组中过滤出零时会得到类似的效果:

const zeros = arr.filter(value => {
  if (value === 0) return value
})
下面是测试函数的示例数组:

[ 0, 1, null, 2, false, 1, 0 ]

谢谢你的帮助

您不需要在
filter
方法中返回值,如果选择该值,则返回布尔值,该值应为true,如下所示:

var moveZeros=函数(arr){
//另外,当您使用!==0时,不需要在比较类型时检查类型
常量非零=arr.filter(值=>value!==0)
常量零=arr.filter(值=>值===0)
const newArr=非零。concat(零)
返回纽瓦尔
}

log(moveZeros([0,1,null,2,false,1,0])你想做什么
filter
需要一个布尔值,您不需要返回值函数的目的是移动数组末尾的所有零,同时保留其他元素的顺序。这只是一个练习,但我想知道筛选方法为什么会这样做。因为
0
false
。因此,当您执行
返回0
时,它与
返回false
相同,这意味着它不会被添加。