语法:
1、for...in循环:遍历数组或集合的
for(var 变量 in 数组名或集合名) //变量中存放的数组或集合的索引
{
数组名[变量]
}
2、for...of循环:遍历数组和集合
for(var 变量 of 数组名或集合名) //变量中存放的是数组或集合中的元素
{
console.log(变量);
}
3、forEach循环
arr.forEach(function(k){ //依次从数组中取出元素放在k中,然后将k作为参数传递给函数
console.log(k);
})
区别:
for...in:
1.for…in以原始插入顺序访问对象的可枚举属性,包括从原型继承而来的可枚举属性。
2.for…in用于遍历数组时,可以将数组看作对象,数组下标看作属性名。但用for…in遍历数组时不一定会按照数组的索引顺序。代码每执行一次,就会对数组的元素或者对象的属性进行一次操作。
3.某些情况下,会出现随机顺序的遍历,因为里面的值是string类型,所以增加了转换过程,因此开销较大
4.可以遍历数组的键名,遍历对象简洁方便
5.for…in不应该用于迭代一个 Array,其中索引顺序很重要。
//首先遍历对象
let person={name:"张三",age:55,city:"西安"}
let text=""
for (let i in person){
text+=person[i]
}
输出结果为:张三55西安
//其次在尝试一些数组
let arry=[1,2,3,4,5]
for (let i in arry){
console.log(arry[i])
}
//能输出出来,证明也是可以的
for...of:
1.for…of语句在可迭代对象(Array,Map,Set,String,TypedArray,arguments 对象等等)上创建一个迭代循环,为每个不同属性的值执行语句。
2.避免了for in的所有缺点,可以使用break,continue和return,不仅支持 数组的遍历,还可以遍历类似数组的对象,支持字符串的遍历,最简洁,最直接的遍历数组的语法。
3.不适用于处理原有的原生对象(原生对象是一个子集,包含一些在运动过程中动态创建的对象)
//遍历数组
let arr=["Nice","to","meet","you"];
for (let item of arr){
console.log(item)
}
//输出结果为Nice to meet you
//遍历对象
let person={name:"里斯",age:23,city:"西安"}
for (let item of person){
console.log(item)
}
//我们发现它是不可以的
forEach:
1.forEach方法对数组/Map/Set中的每个元素执行一次提供的函数。该函数接受三个参数:
(1)正在处理的当前元素,对于Map元素,代表其值;
(2)正在处理的当前元素的索引,对于Map元素,代表其键,对于Set而言,索引与值一样。
(3)forEach()方法正在操作的数组对象。
2.不能同时遍历多个集合,在遍历的时候无法修改和删除集合数据,方法不能使用break,continue语句跳出循环,或者使用return从函数体返回,对于空数组不会执行回调函数
3.便利的时候更加简洁,效率和for循环相同,不用关心集合下标的问题,减少了出错的效率
4.forEach执行后的返回值为undefined
5.forEach不改变原数组
6.想要实现返回筛选的结果可以结合filter
//我们先用它来遍历数组
let arry=[9,8,7,6,5,4]
array.forEach(function(value,index,arr){
console.log(value)
})
//输出结果为9 8 7 6 5 4
//首先有人疑问它能不能用来遍历对象(一开始我也不知道)?
//我们用它来遍历对象试试可不可以
let obj={a:1,b:2,c:3,d:4}
obj.forEach(function(value,index,oObj){
console.log(value)
}
//输出结果会是obj.forEach is not a function,
//所以forEach不可以遍历对象,这也是它和for in的一个区别