for 、forEach 、 forof、 forin遍历对比
一、遍历内容的异同
1.for 和 for...in 是针对数组下标的遍历
2.forEach 及 for...of 遍历的是数组中的元素
二、对非数字下标的处理
由于array在js中也是对象中的一种, 假设array=[1,2,3],所以array.key = 'item' 这种写法也是成立的,所以数组中的下标并不都是数字
1.for...in 可以遍历出非数字的下标,即可以得到 1,2,3,item
2.其他三种只能遍历出数字下标
三、空元素
假如有一个数组 array=[1,,3],这个array.length 为 3
1.for 和 for...of 在遍历array的时候会输出 1,undefined,3
2.forEach 和 for...in 则会跳过空元素,只输出 1,3
四、遍历块中的this 指向
1.for for...in for...of 块中的this指向和块外作用域一致
2.forEach 的函数参数为非箭头函数时,this指向是undefined(废话,新增了作用域而且这个作用域并没有被显式调用)
五、async/await 和 generators 的处理
假设有一个 async 函数,在函数中要调用forEach,同时在forEach中使用await 是有限制的,其他3种则没有。
如果想在forEach中正确使用await,需要这么做:
async function print(n) {
await new Promise(resolve => setTimeout(() => resolve(), 1000 - n * 100));
console.log(n);
}
async function test() {
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9].forEach(print);
}
test();
参考:
http://thecodebarbarian.com/for-vs-for-each-vs-for-in-vs-for-of-in-javascript.html
for 、forEach 、 forof、 forin遍历对比的更多相关文章
- for-each、for-in和for-of的区别
for-each.for-in和for-of的区别 1.forEach()方法 用于调用数组的每个元素,并将元素传递给回调函数. 注意: forEach() 对于空数组是不会执行回调函数的. arra ...
- for,for-each,for-in,for-of,map的比较
参考: 全面解析JavaScript里的循环方法之forEach,for-in,for-of Iterator 和 for...of 循环 JavaScript Array 对象 常规for for循 ...
- forEach、for-in与for-of的区别
forEach.for-in与for-of的区别 forEach介绍 objArr.forEach(function (value) { console.log(value); }); foreach ...
- JavaScript里的循环方法之forEach,for-in,for-of
JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标 ...
- JavaScript里的循环方法:forEach,for-in,for-of
JavaScript诞生已经有20多年了,我们一直使用的用来循环一个数组的方法是这样的: for (var index = 0; index < myArray.length; index++) ...
- php foreach 语法的遍历来源数组如果不是一个有效数组php会出现错误警告 Invalid argument supplied for foreach()
在php中,foreach语法的遍历来源数组如果不是一个有效数组,php会出现错误警告 Invalid argument supplied for foreach() ,但是很多时候这个数组是取自某些 ...
- C# for和 foreach 的数组遍历 比较
刚学习程序,感觉写代码 很有意思,所以把自己的感悟写下来啦,第一次写博客,可能是菜鸟中的菜鸟 时间久了,相信就会写的很好哦! for和 foreach 的数组遍历 比较 很简单的程序,不解释啦! u ...
- for-in遍历json数据
1.for遍历json数据 ','fun':'前端开发'} for(var attr in json){ alert(json[attr]) //遍历json属性的数据 alert(json['nam ...
- Java foreach操作(遍历)数组
语法: 我们分别使用 for 和 foreach 语句来遍历数组 运行结果: 练习: import java.util.Arrays; public class HelloWorld { public ...
随机推荐
- HDU4822-Tri-War
题目 给出一颗树,\(m\)次询问树上不相同的三个点\(A,B,C\).我们称一个点\(x\)被\(A\)占领当且仅当\(dist(A,x)>dist(B,x),dist(A,x)>dis ...
- 洛谷 P3177 树上染色
题面 题目要求将k个点染成黑色,求黑点两两距离及白点两两距离,使他们之和最大. 我们可以将距离转化为路径,然后再将路径路径拆分成边,就可以记录每条边被经过的次数,直接计算即可. 很简单对吧?那么问题来 ...
- TCP(Transmission Control Protocol)学习笔记
一.TCP(Transmission Control Protocol)原理介绍(参考维基百科) TCP连接包括三种状态:连接建立.数据传送和连接终止. TCP用三路握手(three-way hand ...
- java 调用 keytool 生成keystore 和 cer 证书
keytool是一个Java数据证书的管理工具, keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里, 包含两种数据:密钥实体(K ...
- secureCRT mac 下破解
http://blog.csdn.net/skykingf/article/details/17450561
- 用centos 6.5 webservice 安装系统后的问题
编译pcre时:缺少一下库: yum -y install gcc yum -y install gcc-c++
- hadoop(四)HDFS的核心设计
一.hadoop心跳机制(heartbeat) 1. Hadoop 是 Master/Slave 结构, Master 中有 NameNode 和 ResourceManager, Slave 中有 ...
- 【bzoj4898】商旅
Portal -->bzoj4898 Solution 这题的话..首先答案的形式应该是\(01\)分数规划了 然后比较关键的一步在于,我们需要简化一下交易的过程 具体一点就是,我们 ...
- python基础----继承与派生、组合、接口与归一化设计、抽象类、子类中调用父类方法
一.什么是继承 继承是一种创建新的类的方式,在pyth ...
- Java高级应用之泛型与反射20170627
/*************************************************************************************************** ...