跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

如何通过 Array.prototype.filter() 配合 Boolean 构造函数清理原始数组中的假值

arr.filter(Boolean) 是清理数组假值最简洁有效的方式,它保留所有真值元素(如 1、'hello'、true、'0'、[]),剔除 false、0、''、null、undefined、NaN。 用
Array.prototype.filter()
配合
Boolean
构造函数,是清理数组中假值(falsy values)最简洁有效的方式之一。它会保留所有转为
true
的元素,剔除
false
、
0
、
''
(空字符串)、
null
、
undefined
和
NaN
。 为什么 Boolean 能直接用作 filter 的回调函数
Boolean
是一个可调用的构造函数,当不带
new
调用时(即
Boolean(value)
),它会将传入值强制转换为布尔类型并返回结果。而
filter
的回调函数期望返回一个布尔值来决定是否保留当前元素——这恰好与
Boolean
的行为完全匹配。 注意:不能写成
filter(Boolean())
(加括号就变成执行后返回
false
),必须是
filter(Boolean)
(传递函数引用)。 常见假值清理效果示例 以下数组包含典型假值,使用该方法后只留下“真值”元素:
const arr = [0, 1, '', 'hello', null, undefined, NaN, false, true, '0', []]; const cleaned = arr.filter(Boolean); // → [1, 'hello', true, '0', []]
说明:
'0'
和空数组
[]
是真值(非空字符串、非空对象都为
true
),所以被保留;而
0
、
''
、
null
等明确属于 falsy,被过滤掉。 与手写回调函数的对比 等价的手写写法是
arr.filter(x => Boolean(x))
或更简化的
arr.filter(x => x)
。但直接传
Boolean
更短、无闭包开销、语义清晰。
arr.filter(Boolean)
—— 推荐,简洁、高效、意图明确
arr.filter(x => x)
—— 常见,但对
0
、
''
等仍正确,本质相同
arr.filter(x => x != null && x !== '' && x !== 0 && !isNaN(x))
—— 冗长且易错,不推荐 注意事项和边界情况 这个方法按 JavaScript 的 falsy 规则工作,无需额外判断,但需清楚它的行为边界:
0
、
-0
、
0n
(BigInt 零)都会被过滤
''
(空字符串)被过滤,但
' '
(含空格)是真值,会被保留
{}
、
[]
、
new Date()
、
/regex/
全部保留,即使内容为空或无效
new Boolean(false)
是对象,为真值,也会被保留(极少出现,但需知道)

相关文章