我需要从输入array(arr)获取包含所有0-s的新数组。
var a=arr.filter(function(val){
if((val===0)){
return val;
}
})
由于某种原因,它将返回一个空数组,例如,如果我尝试获取数组中所有非0值
var a=arr.filter(function(val){
if(!(val===0)){
return val;
}
})
此代码可以正常工作。
为什么?
答案 0 :(得分:2)
让我们逐步讲解这些,但首先我们需要看看“真/假”的定义
来自MDN docs:在JavaScript中,真实值是在布尔上下文中遇到时被视为true的值。除非将其定义为虚假(即false,0,“”,null,undefined和NaN除外),否则所有值都是真实的。
您的第一个示例:
if((val===0)){
return val;
}
第一个仅返回零,而您返回这些零。零是虚假的,因此将它们排除在外。
其他值没有返回值,并且没有显式return语句的函数总是返回undefined ...这是虚假的。
所以两个条件都返回falsy并且结果为空数组
第二个示例
if(!(val===0)){
return val;
}
返回零以外的任何值,然后返回值。
所有非零数字都是真实的,因此您将所有数字都放在数组中。
由于没有明确的返回值再次返回未定义的值,所以零被排除了
如何过滤以正确的true / false返回非零值?
return val !== 0;