用数组 Every 方法好多年,发现自己的理解是错的
创始人
2025-07-13 16:10:59
0

大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心~

背景

今天在开发项目的时候,我的组员造成了一个BUG,原因是用了一个挺常用的数组方法:ervey,相信大家都见过,或者都用过,它经常跟 some 成双出现,我们理解这两个方法是:

  • every: 判断数组每一项是否符合条件
  • some: 判断数组是否至少有一个符合条件

可以通过一个小例子来认识,我准备了一个用户数组,我分别想做两件事:

1、判断是否所有人都成年了

2、判断是否有人大于20岁

图片图片

有坑?

再来项目中搞的代码吧,逻辑也跟上述例子差不多,就是通过请求获取一组用户,并判断这组用户是否全都已成年

图片图片

但是这个代码却出现了BUG,什么呢?就是当 users 是空数组的时候,every 会返回 true!!!不信我们可以看看

图片图片

我当时看到了,也感觉挺不解的,按理说,every: 判断数组每一项是否符合条件,那如果数组为空的话,那就是没有一个符合条件的,不应是返回 false 吗,不过先不管,先改BUG 先,后面再去想了,加个长度判断,先解决BUG先

图片图片

空数组,every 返回 true?

我们先来看一下ECMA-262定义的Array.prototype.every

图片图片

可以看到,every 是判断每一次执行循环函数是否有 false 返回,有的话直接返回 false,如果一个 false 都没有,那就返回 true

关于空数组调用 every() 返回 true 的原因,MDN 网页 提供了答案:

every 的作用就像数学中的“for all”量词。特别是,对于空数组,它返回 true。(地球人都知道,空集的所有元素都满足任何给定的条件。)

空真(Vacuous truth) 是一个数学概念,它意味着若给定条件(称为前提)不能满足(比如给定条件不为真),则某事为真。用 JS 的术语来说,every() 返回 true,是因为它无法调用回调。回调表示要测试的条件,如果因为数组中没有值而无法执行,那么 every() 必须返回 true。

全称量词 是数学中一个更大主题的一部分,它允许您对数据集进行推理。考虑到 JS 数组对于执行数学计算的重要性,尤其是类型化数组,为此类操作提供内置支持是有意义的。every() 不是孤例。

改变思维

以前我人为的:every 判断数组每一项是否符合条件

但是我觉得我不应该那么理解,我应该理解为:every 判断数组是否至少有一个不符合条件,这么去理解的话,自然就能知道为什么空数组是返回 true了,因为就没有不符合条件的,当然就是返回 true 啦~

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
P2P的自白|我不生产内容,我... 现在一提起P2P,人们就会联想到正在被有关部门“围剿”的互联网理财服务。×租宝事件使得劳...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...