文章略长,但比较简单。

es6中的数组方法some()和every()都接收一个回调函数作为参数,该回调函数又接收三个参数,分别是数组元素、数组元素的索引、调用some或every方法的数组本身。它们的区别就是:
some方法用于判断数组中是否存在某个符合判断条件的元素,判断在回调函数的函数体内完成,并由回调函数返回一个布尔值。如果回调函数在某次返回了true,则整个some方法返回true,且结束遍历。
every方法用于判断数组中是否任意一个元素都符合判断条件,判断同样是在回调函数的函数体内完成,并由回调函数返回一个布尔值。如果回调函数在某次返回了false,则整个every方法返回false,且结束遍历。
注意:some和every方法都不会改变原来的数组。

1、some方法举例如下图所示:
图1
图2

分析图1可知,在每次执行回调函数时,回调函数返回的布尔值都为false,因此some方法不会提前退出遍历,因此会把数组中的每一个元素都遍历一次。从图2可知,在判断第一个元素是否符合条件时,回调函数就返回了true,则整个some方法返回true,直接停止了遍历,不再判断后面的元素。

2、every方法举例:
图3

图4

根据前面的描述:every方法会在回调函数返回false时直接中止遍历,因此得到图3和图4的执行结果。

3、回调函数没有(主动)返回
上面的4个例子都是在回调函数主动返回布尔值,即调用了return语句的情况下分析的。下面来看如果回调函数没有主动返回布尔值时的表现:
对于some方法:
图5

对于every方法:
图6

分析图5和图6,可以看到在回调函数没有主动返回布尔值的情况下,some方法没有提前停止元素遍历,而every方法在第一个元素后就停止遍历了;some方法提前停止遍历的条件是return true,every方法提前停止遍历的条件时return false;也就是说回调函数默认会返回false;

4、特殊情况
下面再来看关于回调函数的一种特殊情况:
对于some方法:
图7

对于every方法:
图8

分析图7和图8,在回调函数同样没有return语句的情况下,执行结果为什么与第3点描述的不一样?即为什么这里能返回正确的结果?实际上,这里和第3的区别在于回调函数虽然没有return语句,但同时也没有大括号{}包含函数体。这种情况下,实际上和 {return xxx}的效果是一样的,回调函数其实是有主动返回值的。

总结一下,有三个重要的点:
(1)some和every方法提前停止遍历的前提(分别是回调函数return true和return false);
(2)回调函数没有主动返回布尔值时,默认都是返回false;
(3)回调函数的函数体只有一个语句且没有{}包含,实际上和有{}包含且有return语句是相同的。

如有错误,欢迎指出。

es6的some和every方法使用;相关推荐

  1. .vue文件在webstorm中es6语法报错解决方法

    .vue文件在webstorm中es6语法报错解决方法 参考文章: (1).vue文件在webstorm中es6语法报错解决方法 (2)https://www.cnblogs.com/yuqing6/ ...

  2. js es6使用数组的every方法遇到的问题

    最近在看js数据结构和算法的书,并且把书里面的案例敲了一遍,在集合这一章里面,在封装集合子集的时候是这样封装的, isSubsetOf(otherSet) { if (this.size() > ...

  3. ES6中新增的字符串方法

    实例方法:includes(), startsWith(), endsWith() 传统上,JavaScript 只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中.ES6 又提供 ...

  4. ES6中的Promise使用方法与总结

    在javascript中,代码是单线程执行的,对于一些比较耗时的IO操作,都是通过异步回调函数来实现的. 但是这样会存在一个问题,当下一个的操作需要上一个操作的结果时,我们只能把代码嵌到上一个操作的回 ...

  5. es6 --- Proxy实例的get方法

    写一个拦截函数,访问目标对象不存在属性时,会抛出不存在该属性的错误 如果存在该属性时,就返回其值. var person = {name: "张三" };var proxy = n ...

  6. ES6学习(新增字符串方法)

    传统上,JavaScript只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中.ES6又提供了三种新方法. includes() includes():返回布尔值,表示是否找到了参 ...

  7. 关于es6中常见的一些方法----对象篇

    好了,话不多说,是骡子是马拉出来溜溜,这篇文章笔者就来简单介绍下关于对象的一些方法 1.Object.is() Object.is() 方法判断两个值是否是相同的值. 参数: value1: 第一个需 ...

  8. ES6/07/Array的扩展方法,...扩展运算符,Array.from(),(arr.find(),arr.findIndex()和arr.includes())模板字符串,Set数据结构

    ES6扩展的内置对象 1,Array的扩展方法 -扩展运算符(展开语法) 1,扩展运算可以的将数组或者对象转为用逗号分隔的参数序列: let ary =[1,2,3]; //-ary;//" ...

  9. ES6中新增数组遍历方法

    ES6中新增的方法 遍历方法: forEach(),fifter(),some(): array.forEach(function(currentValue,index,arr)) // curren ...

  10. JavaScript ES6中Object的新增方法

    在 ES6 中,添加了Object.is().Object.assign().Object.keys().Object.values().Object.entries()等方法. 1. Object. ...

最新文章

  1. 如何让hierarchyviewer调试查看商业版真机上的应用
  2. linux给普通用户分配root权限
  3. 策略模式(Stratety)
  4. 职业规划纵向横向_金融行业之职业规划
  5. android settings源代码分析(2)
  6. JVM调优总结 -Xms -Xmx -Xmn -Xss(转载)
  7. ConcurrentHashMap的源码分析-为什么要做高低位的划分
  8. 计算机发展与应用,网络计算机的发展与应用
  9. 【图论】【最短路】【Dijkstra】最小花费(ssl 2206/luogu 1576)
  10. pHp30充电宝能用快充吗,65W快充 30分钟充满电 是时候淘汰充电宝了吗?
  11. java程序编译命令_使用 java 命令编译运行 java 程序
  12. TortoiseSvn和Subclipse对应关系
  13. 代码覆盖率分析 - VectorCAST/CBA
  14. 阿里云——云开发平台基于Python的web项目部署到Serverless
  15. 全球与中国汽车牛皮革市场“十四五”前景规划及运营趋势研究报告2022-2028年
  16. 畅捷通T+ v2接口 发布IIS报错 RsaUsingSha with PSS
  17. 小程序好看卡片式轮播
  18. 私有文件服务器,私有云文件服务器
  19. SpringBoot微架构-李兴华-专题视频课程
  20. 趁热打铁,再构建百万节点关系中药方剂知识图谱

热门文章

  1. 使用CSS更改鼠标(光标的样式)
  2. OpenCV + CPP 系列(卌一)图像特征匹配( FLANN 匹配)
  3. Linux基础——磁盘配额
  4. Android点击WebView中的图片查看大图
  5. Genymotion刷入谷歌应用市场以及获取root权限
  6. UE4后期处理之水下效果
  7. Mac使用移动硬盘装Win10系统
  8. 画一个秘密花园 | Scratch 3.0 艺术项目
  9. C语言程序设计第三章
  10. 算法设计与分析--昆虫繁殖