理解Lodash中_.every方法的行为:全属性为null为何返回false
问题原因
你对_.every方法的传参规则理解有偏差,导致结果不符合预期,具体原因如下:
- Lodash的集合类方法(包括
_.every)的第二个predicate参数,会根据传入值的类型走不同的判断逻辑:- 传入函数时,会对每个集合元素执行该函数,所有返回值为真值时最终返回
true - 传入非函数类型时,如果类型识别为
object(注意typeof null在JS原生逻辑中返回object),会默认创建_.matches匹配器,要求集合中的每个元素都包含该对象的所有键值对,而非判断元素和该值直接相等
- 传入函数时,会对每个集合元素执行该函数,所有返回值为真值时最终返回
- 你传入的第二个参数是
null,Lodash会将其识别为匹配用的源对象,而_.matches(null)对任何值的判断结果都是false,所以最终返回false
正确写法
如果你要判断对象所有属性值都等于null,可以用以下两种写法:
- 传入自定义判断函数
const val = _.every(items, v => v === null)
- 用Lodash内置的
_.isNull判断方法
const val = _.every(items, _.isNull)
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

