早在17年写过一篇JS数组的文章
Javascript数组的every、some、map、filter、forEach
文中提到
every,判断是否所有元素都符合,需要每个都为true才返回true,否则返回false
这个说法有误,当传入空数组时,返回的也是 true
1 | [].every(_ => true) |
所以并不是说数组每个都为true时结果才为true,这点就很费解了
然后搜了ECMA-262规范的实现
1 | Array.prototype.every = function(callbackfn, thisArg) { |
可以看出最后的 return true
,也就是说只有数组里遇到false
,才会返回false
,没有遇到false
则默认返回true
所以空数组时,压根没有进到while
循环,就直接返回默认true
了
再来看看 some
遇到空数组
1 | [].some(_ => false) |
空数组时,不管传入的判断函数返回值是什么,总是返回 false
查看some
的实现
1 | Array.prototype.some = function(fun/*, thisArg*/) { |
可以发现跟every
正好相反,默认返回值是false
,只有按数组中判断返回true
时,才会返回true