“返回”;空";“来自Javascript的值”;“过滤器”;功能

“返回”;空";“来自Javascript的值”;“过滤器”;功能,javascript,arrays,Javascript,Arrays,假设我有以下数组:arr=[1,2,0,null,4],我想过滤数组中的所有“0”。 一个示例代码是: arr.filter((val) => {return val !== 0}) //>> [1, 2, null, 4] 它很好用。但如果改用if语句,则不会返回“null”值: arr.filter((val) => {if(val !== 0) return val}) //>> [1, 2, 4] 仅当我返回包含“值”的数组时,它才起作用: 有人能

假设我有以下数组:
arr=[1,2,0,null,4]
,我想过滤数组中的所有“0”。 一个示例代码是:

arr.filter((val) => {return val !== 0})
//>> [1, 2, null, 4]
它很好用。但如果改用if语句,则不会返回“null”值:

arr.filter((val) => {if(val !== 0) return val})
//>> [1, 2, 4]
仅当我返回包含“值”的数组时,它才起作用:


有人能解释为什么在使用if语句时,只有在数组中才返回“null”吗

如果从
过滤器
回调返回的值为truthy,则结果数组中将包含一个项

return val !== 0
如果
val
为0,则返回
false
,否则返回
true

if(val !== 0) return val
如果
val
0
,则返回
undefined
,否则返回
val
。因此,如果
val
不是
0
,但仍然是错误的(如
null
),则它不会包含在结果中

但是数组总是真实的(不管它们包含什么值),所以

将始终导致最终数组中包含非
0

console.log(布尔值(null));
log(布尔值([null])Well应该返回true或false

您没有返回真或假。因此,它将您的项转换为布尔值


所以null是错误的,数组是真实的。

过滤器应该返回true或false…哦,我误解了过滤器的行为。现在清楚了,谢谢!
if(val !== 0) return val
if(val !== 0) return [val]}