比方说,我有以下阵列:arr = [1, 2, 0, null, 4]
,我想在阵列中筛选所有的“0”。一个例子代码如下:
arr.filter((val) => {return val !== 0})
//>> [1, 2, null, 4]
它工作得很好。但是,如果我使用if语句来代替,不返回“空”值:
arr.filter((val) => {if(val !== 0) return val})
//>> [1, 2, 4]
它只有当我返回包含“价值”的数组的工作原理:
arr.filter((val) => {if(val !== 0) return [val]})
//>> [1, 2, null, 4]
任何人可以解释在使用if语句为什么“空”只返回,如果它是一个数组?
一个项目将被包括在产生的阵列中如果从filter
回调返回的值是truthy。
return val !== 0
将返回false
如果val
是0,否则true
。
if(val !== 0) return val
将返回undefined
如果val
是0
,并将否则返回val
。所以,如果val
不0
,但仍是falsey(如null
),它不会被列入结果。
但数组始终truthy(无论什么样的价值观所包含),所以
if(val !== 0) return [val]}
将总是导致被包括在最终的阵列中的非0
值。
console.log(Boolean(null));
console.log(Boolean([null]));