JavaScript中Promise数组执行filter(resp => resp)语句的作用是什么
代码运行逻辑说明
你给出的代码如下:
let contentResps = responses.filter(resp => resp);
核心运行逻辑
- Array的
filter方法会遍历原数组的每一个元素,传入回调函数执行,仅保留回调返回值隐式转换为布尔值后为true的元素,最终返回一个新数组,不会修改原数组。 - 回调
resp => resp是语法简写,等价于显式返回传入的元素本身,这里利用了JavaScript的隐式类型转换规则做判断:- 当元素是
false、0、空字符串''、null、undefined、NaN这类假值时,会被过滤排除 - 其余所有值(包括所有非空的Promise实例对象)都会被判定为真值,保留到新数组中
- 当元素是
针对Promise数组的执行效果
如果responses确实是完全由Promise实例组成的数组:
- 只要数组中没有混入上述假值元素,过滤得到的
contentResps和原responses数组的内容完全一致 - 如果数组构造过程中可能生成空值、无效占位项,这行代码就会清理掉所有无效值,得到仅包含有效Promise实例的新数组
注意:这行代码仅做数组层面的元素过滤,不会执行Promise,也不会对Promise的成功/失败状态做任何判断。
内容的提问来源于stack exchange,提问作者JimNeedsCoffee
相关产品推荐
相关产品推荐

