背景:every作为es6常用的数组方法,在使用时,如果赋值的数组为空,会有先入为主的直觉性问题。
代码如下:
// 数组
let arr = [0,1,2,3,4];
arr.every(num => item<5); // 全部满足,返回true
arr.every(num => item<2); // 有不满足,返回false
// 数组2
let arr2 = [];
arr.every(num => item<5) // 返回true
震惊!数组2的判断竟然返回 true
why?
其实应该这样理解,every 判断每一次循环的时候是否有false 返回,空数组没有返回false,因为并不进入到循环条件中,所以返回了true
简易版every
function every(callback, thisArg) {
const array = this
const len = array.length
// 空数组不循环,所以返回了true
for (let i = 0; i < len; i++) {
if (callback.call(thisArg, array[i], i, array)) {
continue
} else {
return false
}
}
return true
}