服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - 编程技术 - 用数组 every 方法好多年,发现自己的理解是错的

用数组 every 方法好多年,发现自己的理解是错的

2024-03-04 14:53前端之神 编程技术

今天在开发项目的时候,我的组员造成了一个BUG,原因是用了一个挺常用的数组方法:ervey,相信大家都见过,或者都用过。

背景

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

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

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

  • 判断是否所有人都成年了
  • 判断是否有人大于20岁

用数组 every 方法好多年,发现自己的理解是错的

有坑?

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

用数组 every 方法好多年,发现自己的理解是错的

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

用数组 every 方法好多年,发现自己的理解是错的

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

用数组 every 方法好多年,发现自己的理解是错的

空数组,every 返回 true?

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

用数组 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 啦~

原文地址:https://mp.weixin.qq.com/s?__biz=Mzg2NjY2NTcyNg==&mid=2247493086&idx=1&sn=b4d0f9690d6d0dbddf53cacc5751c3f6

延伸 · 阅读

精彩推荐
  • 编程技术高可靠的跨系统转账如何设计

    高可靠的跨系统转账如何设计

    以上我们介绍了如何设计一个高可靠的系统转账,可以看到还是比较复杂的,细节很多,主要要考虑补偿、安全、并发扣款几方面,这几方面做好才能设计...

    蜗牛哥10522024-01-15
  • 编程技术五步学会任何编程语言

    五步学会任何编程语言

    只需一点编程经验,你就可以在短短几天内(有时更少)学会一种新编程语言。...

    Linux中国4932020-11-22
  • 编程技术Ruby 3发布,为何性能能提升3倍

    Ruby 3发布,为何性能能提升3倍

    对于所有Rubyists来说,2020年是特殊的一年。难道不是这样么?Ruby 2于2013年发布,我们使用Ruby 2.x已有7年之久,我们一直在等待Ruby 3的发布。...

    今日头条6012020-12-28
  • 编程技术在vscode中使用Git的教程

    在vscode中使用Git的教程

    这篇文章主要介绍了在vscode中使用Git的教程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    manasXX5362020-09-05
  • 编程技术Openharmony 测试用例指导大全

    Openharmony 测试用例指导大全

    本文为您介绍Openharmony 测试用例指导大全,编写一个动态库libmoduleb_lib.z.so , 然后编写一个测试可执行文件ModuleBTest验证动态库接口的正确性。...

    鸿蒙社区10752021-12-22
  • 编程技术这5个理由让软件架构师积极拥抱低代码

    这5个理由让软件架构师积极拥抱低代码

    软件开发者和架构师曾经有理由对低代码技术持怀疑态度,但今天,许多成熟的低代码平台使敏捷开发团队能够提高生产力、增加质量、并频繁部署。开发...

    infoworld5732022-02-24
  • 编程技术千万要避免的五种程序注释方式小结

    千万要避免的五种程序注释方式小结

    你是否有过复查程序时发现有些注释毫无用处?程序注释是为了提高代码的可读性,为了让原作者以外的其他开发人员更容易理解这段程序。...

    编程猫3452020-07-21
  • 编程技术如何用CSS实现一个搜索引擎?

    如何用CSS实现一个搜索引擎?

    在搜索引擎中输入关键词,搜索引擎经过检索,返回关键词对应的数据.既然道理都一样,那能不能用纯CSS实现一个搜索引擎呢?本文来聊聊他是如何实现的...

    魔术师卡颂7442021-09-14