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的更多相关文章

  1. 先说IEnumerable,我们每天用的foreach你真的懂它吗?

    我们先思考几个问题: 为什么在foreach中不能修改item的值? 要实现foreach需要满足什么条件? 为什么Linq to Object中要返回IEnumerable? 接下来,先开始我们的正 ...

  2. 了解PHP中的Array数组和foreach

    1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组    . 2.例子:一般的数组 这里,我 ...

  3. 浅谈JavaScript中forEach与each

    forEach是ES5中操作数组的一种方法,主要功能是遍历数组,例如: var arr = [1,2,3,4]; arr.forEach(alert); 等价于: var arr = [1, 2, 3 ...

  4. 《ES6基础教程》之 map、forEach、filter indexOf 用法

    1,map,对数组的每个元素进行一定操作,返回一个新的数组. var oldArr = [{first_name:"Colin",last_name:"Toh" ...

  5. php foreach引用赋值

    在写代码时发现php foreach引用赋值会导致意外的行为. 代码示例: <?php $arr = array('a','b','c'); foreach($arr as $k=>&am ...

  6. JAVA中的for-each循环与迭代

    在学习java中的collection时注意到,collection层次的根接口Collection实现了Iterable<T>接口(位于java.lang包中),实现这个接口允许对象成为 ...

  7. 解决mybatis foreach 错误: Parameter '__frch_item_0' not found

    解决mybatis foreach 错误: Parameter '__frch_item_0' not found 在遍历对象的属性(是ArrayList对象)时报错: org.mybatis.spr ...

  8. PHP 的 foreach

    foreach 可以 针对 string 操作,不过会生成一个警告,并跳过该 expression, 举例: $ids = '123'; foreach ($ids as $item){ print_ ...

  9. Parallel.Foreach

    随着多核时代的到来,并行开发越来越展示出它的强大威力! 使用并行程序,充分的利用系统资源,提高程序的性能.在.net 4.0中,微软给我们提供了一个新的命名空间:System.Threading.Ta ...

  10. foreach

    一 foreach的语法介绍    PHP 4以上的版本包括了 foreach 结构,这只是一种遍历数组简便方法.foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生 ...

随机推荐

  1. JavaScript 数组对象常用属性

    concat() 用于连接两个或多个数组.该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本. var a = ["aa","ccc"]; var b ...

  2. html发展史简介(摘抄)

    1993年,IETF,Internet工程任务组(Internet Engineering Task Force)的简写.IETF又叫互联网工程任务组,成立于1985年底,是全球互联网最具权威的技术标 ...

  3. js截取关键字之后的字符串

    需求:截取下面字符串"="之后的所有字符 var str = "12345=6"; //要截取的字符串 var index = str.indexOf(&quo ...

  4. linux php多版本

    ecshop还非php5.2 解压 gzip -cd php-5.2.14-fpm-0.5.14.diff.gz | patch -d php-5.2.14 -p1 打上php-fpm补丁再安装php ...

  5. linux多线程编程——读者优先、写者优先问题

    读者优先描述 如果读者来: 1) 无读者.写着,新读者可以读: 2) 无写者等待,但有其他读者正在读,新读者可以读: 3) 有写者等待,但有其他读者正在读,新读者可以读: 4) 有写者写,新读者等 如 ...

  6. Android weex的集成和开发

    最近为了项目需要(实际上是为了年底KPI),领导要求用3天时间,学习并使用weex开发一个页面,说实话,压力山大.在这之前压根儿就没听说过啊,一脸懵逼 无奈之余只能Google了,惊喜的发现weex的 ...

  7. metasploit 连接database相关问题

    我们首先去这个目录下看database.yml文件内容: 下图是我们看到的的信息 接着打开metasploit,运行db_connect 指令链接数据库.格式为: db_connect 用户名:密码@ ...

  8. mysql 配置详解

    [client]port = 3306socket = /tmp/mysql.sock [mysqld]port = 3306socket = /tmp/mysql.sock basedir = /u ...

  9. 设计模式:代理(Proxy)模式

    设计模式:代理(Proxy)模式 一.前言    代理模式或许我们都听说过,至少知道代理(Proxy)这个东西的,否则看这篇博客也没任何意义的.什么叫做代理,代理是代替服务器去接受请求者的请求的中间人 ...

  10. ptyhon class定制方法

      __iter__ 如果一个类想被用于for ... in循环.须实现一个__iter__()方法,该方法返回一个迭代对象,然后,Python的for循环就会不断调用该迭代对象的__next__() ...