forEach for...in for...of
forEach
orEach 方法为数组中含有有效值的每一项执行一次 callback 函数,那些已删除(使用 delete 方法等情况)或者从未赋值的项将被跳过(不包括那些值为 undefined 或 null 的项)
callback函数会被依次传入三个函数:
数组的当前项的值
数组当前项的索引
数组对象本身
let arr = ['a','b','c'];
arr[3] = 'd';
arr.name = 'Tom';
arr.forEach((value,index,data)=>{
console.log(value,index,data)
})
//a 0 ["a", "b", "c", "d", name: "Tom"]
//b 1 ["a", "b", "c", "d", name: "Tom"]
//c 2 ["a", "b", "c", "d", name: "Tom"]
//d 3 ["a", "b", "c", "d", name: "Tom"]
let arr = [{name:'Jack',age:12},{name:'Lucy',age:9},{name:'Tom',age:15}];
arr[3] = 'd';
arr.name = 'Tom';
arr.forEach((value,index,data)=>{
console.log(value,index,data)
})
//{name:'Jack',age:12} 0 [{name:'jack',age:12},{name:'lucy',age:9},{name:'Tom',age:15},'d',name:'Tom']
//{name:'Lucy',age:9} 1 [{name:'jack',age:12},{name:'lucy',age:9},{name:'Tom',age:15},'d',name:'Tom']
//{name:'Tom',age:15} 2 [{name:'jack',age:12},{name:'lucy',age:9},{name:'Tom',age:15},'d',name:'Tom']
//d 3 [{name:'jack',age:12},{name:'lucy',age:9},{name:'Tom',age:15},'d',name:'Tom']
缺点:不能跳出forEach循环,break命令与return命令都不能奏效
for...in...
Array.prototype.age = 18;
let arr = [1,2,3];
arr[3] = 4;
arr.name = 'Jack';
for(let index in arr){
console.log('arr['+index+'] = '+arr[index])
}
//arr[0] = 1
//arr[1] = 2
//arr[2] = 3
//arr[3] = 4
//arr[name] = Jack
//arr[age] = 18
缺点:
数组的键名是数字,但是for...in循环是以字符串作为键名“0”,“1”,“2”等等
for...in循环不仅遍历数字键名,还会遍历手动添加的其他键,甚至包括原型链上的键
某些情况下,for...in循环会以任意顺序遍历键名
for...in循环主要是为遍历对象而设计的,不适用于遍历数组。
补充:
- for-in 循环遍历的是对象的属性,而不是数组的索引
- Array 在 Javascript 中是一个对象, Array 的索引是属性名
- for-in 遍历属性的顺序并不确定,即输出的结果顺序与属性在对象中的顺序无关,也与属性的字母顺序无关,与其他任何顺序也无关
for...of...
Array.prototype.age = 18;
let arr = [1,2,3];
arr[3] = 4;
arr.name = 'Jack';
for(let index of arr){
console.log(index)
}
//1
//2
//3
//4
优点:
有着同for...in一样的简介语法,但是没有for...in那些缺点
不同于forEach方法,他可以与break、continue、return配合使用
提供了遍历所有数据结构的统一操作接口
补充:
for...in循环的是key for...of循环的是value
forEach for...in for...of的更多相关文章
- 先说IEnumerable,我们每天用的foreach你真的懂它吗?
我们先思考几个问题: 为什么在foreach中不能修改item的值? 要实现foreach需要满足什么条件? 为什么Linq to Object中要返回IEnumerable? 接下来,先开始我们的正 ...
- 了解PHP中的Array数组和foreach
1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组 . 2.例子:一般的数组 这里,我 ...
- 浅谈JavaScript中forEach与each
forEach是ES5中操作数组的一种方法,主要功能是遍历数组,例如: var arr = [1,2,3,4]; arr.forEach(alert); 等价于: var arr = [1, 2, 3 ...
- 《ES6基础教程》之 map、forEach、filter indexOf 用法
1,map,对数组的每个元素进行一定操作,返回一个新的数组. var oldArr = [{first_name:"Colin",last_name:"Toh" ...
- php foreach引用赋值
在写代码时发现php foreach引用赋值会导致意外的行为. 代码示例: <?php $arr = array('a','b','c'); foreach($arr as $k=>&am ...
- JAVA中的for-each循环与迭代
在学习java中的collection时注意到,collection层次的根接口Collection实现了Iterable<T>接口(位于java.lang包中),实现这个接口允许对象成为 ...
- 解决mybatis foreach 错误: Parameter '__frch_item_0' not found
解决mybatis foreach 错误: Parameter '__frch_item_0' not found 在遍历对象的属性(是ArrayList对象)时报错: org.mybatis.spr ...
- PHP 的 foreach
foreach 可以 针对 string 操作,不过会生成一个警告,并跳过该 expression, 举例: $ids = '123'; foreach ($ids as $item){ print_ ...
- Parallel.Foreach
随着多核时代的到来,并行开发越来越展示出它的强大威力! 使用并行程序,充分的利用系统资源,提高程序的性能.在.net 4.0中,微软给我们提供了一个新的命名空间:System.Threading.Ta ...
- foreach
一 foreach的语法介绍 PHP 4以上的版本包括了 foreach 结构,这只是一种遍历数组简便方法.foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生 ...
随机推荐
- kotlin语法
https://try.kotlinlang.org/#/Examples/Hello,%20world!/Simplest%20version/Simplest%20version.kt /** * ...
- js数组与字符串处理 slice、splice、substring、substr、push、pop、shift、reverse、sort、join、split
数组 方法 1.在数组末尾添加.删除元素 push()方法可以接收任意数量的参数,把它们逐个添加到数组的末尾,并返回修改后数组的长度.改变原数组 pop()方法则从数组末尾移除最后一个元素,减少数组的 ...
- css3+javascript旋转的3d盒子
今天写点css3,3d属性写的3d盒子,结合javascript让盒子随鼠标旋转起来 今天带了css3新属性3d <!DOCTYPE html> <html> <head ...
- Linux Centos7安装Oracle12c第二版本
环境: CentOS7@VMware12,分配资源:CPU:2颗,内存:4GB,硬盘空间:30GB Oracle12C企业版64位 下载地址:http://www.oracle.com/technet ...
- 第6课 仿Siri机器人-语音朗读和语音识别
一.功能设计 输入文本,单击“朗读”按钮,由手机读出该文本(如果没有输入文本,则弹出消息框警告“请输入文本):单击“识别”按钮,读入语音,从文本框中输出文字.(另,增加识别的视觉效果,如果读入的文本含 ...
- Openstack实践(1)部署使用实例及neutron网络
版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 ,博主地址:http://www.cnblogs.com/SuperXJ/ 如何快速部署使用openstack,使用kolla吧,o ...
- Hadoop自定义JobTracker和NameNode管理页面
为了可以方便地在hadoop的管理界面(namenode和jobtracker)中自定义展示项,使用代理servlet的方式实现了hadoop的管理界面. 首先, 在org.apache.hadoop ...
- Gitlab命令行简单使用
使用Gitlab拉取远程文件到本地,然后再创建新分支的流程: git clone url #将远程分支拉取到本地: git status / git branch #查看git的状态和分支情况,g ...
- 微软智能云的核心DNA
你知道吗? 今天,微软智能云平台运行于全球30个区域,体量超过了两大云服务商亚马逊和谷歌的总和: 今天,在全球范围内超过85%的财富五百强企业都使用了微软Azure云服务,而中国部分的用户也达到了六万 ...
- VS配置Qt
https://blog.csdn.net/qq_35488967/article/details/71516640