filter(Boolean)能过滤假值,是因为Boolean函数将每个元素显式转为布尔值,filter保留返回true的元素;它会移除false、0、''、null、undefined、NaN等所有假值,如[0, 1, '', 'hello', null].filter(Boolean)得[1, 'hello']。

用 filter(Boolean) 是 JavaScript 中最简洁的“过滤假值”写法,它利用 Boolean 构造函数在每次遍历时自动将元素转为布尔值,并保留为 true 的项。
为什么 filter(Boolean) 能过滤假值
Boolean 作为函数调用时,会对传入值执行显式类型转换,返回对应的布尔结果。而 filter 的回调函数接收每个元素并判断返回值是否为真值——只有返回 true 的元素才会被保留在新数组中。
所以 [0, 1, '', 'hello', null, undefined, NaN, false].filter(Boolean) 得到 [1, 'hello'],因为只有这两个是真值。
等价于手动写 Boolean 判断
下面两种写法效果完全一样:
arr.filter(Boolean)-
arr.filter(x => Boolean(x))或更常见的arr.filter(x => x)
区别在于:Boolean 显式强调类型转换意图,x => x 更简短但可能掩盖“过滤假值”的语义,尤其对新手不够直观。
常见适用场景
这个技巧特别适合清洗数据,比如:
- 去除数组中的空字符串、
null、undefined:['a', '', null, 'b', undefined].filter(Boolean)→['a', 'b'] - 扁平化后去空:
['1,2,3', '4,,5'].map(s => s.split(',')).flat().filter(Boolean)→['1', '2', '3', '4', '5'] - 处理 DOM 查询结果(如
querySelectorAll转数组后剔除无效节点)
注意边界情况
Boolean 对以下值返回 false(即会被过滤掉):
false-
0和-0 -
''(空字符串) nullundefinedNaN
如果你需要保留 0 或 '0' 这类“有业务意义的假值”,就不能直接用 filter(Boolean),得改用更精确的条件,例如 filter(x => x != null && x !== '')。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











