JavaScript使用array.every()方法无法得到预期布尔值判断结果的咨询
核心问题根源
你碰到的输出异常和数组元素是字符串/数字类型完全没有关系,错误来自校验回调的逻辑写法。
错误细节拆解
- 你定义的
isPositive、isNegative函数根本没有做相等判断,反而写了赋值操作:- 写法
curr => curr = "+1"中的=是赋值运算符,并非用于相等比较的==/=== - 这个箭头函数会隐式返回赋值的结果,也就是不管传入的
curr实际是什么值,函数永远返回固定的字符串"+1"
- 写法
- 按照JS的布尔转换规则,非空字符串属于真值,会被
every()方法判定为“当前元素校验通过”。由于回调永远返回真值,every()遍历完全部元素后自然返回true,最终输出"T"。
关于你提到的.some()使用体验
不管是every()还是some(),判定逻辑都依赖回调返回值的布尔转换结果:
- 如果回调永远返回真值,
every()会判定所有元素校验通过,最终返回全量校验通过的结果; - 同时
some()也会判定至少有一个元素校验通过,同样返回true。
你之前用.some()没碰到同类问题,本质是之前写的回调是正确的比较逻辑,这次只是把比较符号错写成了赋值符号,才触发了异常表现。
修正写法
把回调里的赋值逻辑替换为严格相等比较即可:
// 适配字符串数组的判断逻辑 let isPositive = curr => curr === "+1"; // 适配数字数组的判断逻辑 let isPositiveNum = curr => curr === 1;
小提示:写单行隐式返回的箭头函数时,很容易把
=和===写混,写完可以单独在控制台运行回调,验证返回值是否符合预期,规避这类低级语法错误。
内容的提问来源于stack exchange,提问作者blob
相关产品推荐
相关产品推荐

