优点:
缺点:
//有一个对象:
let obj={a:1,b:2,c:3}
//用Object.keys属性转化
let obj2=Object.keys(obj)
//最后就可以用来遍历了
for (let i=0;i<obj2.length;i++){
console.log(obj2[i])
}
//输出结果就能出来了,forEach,for of同理
for in
的循环性能循环很差。性能差的原因是因为:for in
会迭代对象原型链上一切可以枚举
的属性。
定义:用于循环遍历数组或对象属性,fot in循环里面的index是string类型
的,
优点:可以遍历数组的键名,遍历对象简洁方便
缺点:
for in
会将公有(prototype) 中可枚举的属性也遍历了。可以使用 hasOwnProperty
来阻止遍历公有属性。for in
循环主要遍历数字优先,由小到大遍历for in
无法遍历 Symbol
属性(不可枚举)。//首先遍历对象
let person={name:"老王",age:23,city:"大唐"}
let text=""
for (let i in person){
text+=person[i]
}
输出结果为:老王23大唐
//其次在尝试一些数组
let arry=[1,2,3,4,5]
for (let i in arry){
console.log(arry[i])
}
//能输出出来,证明也是可以的
一个数据结构只要部署了 Symbol.iterator
属性,就被视为具有 iterator
接口,就可以用 for...of
循环遍历它的成员。也就是说,for...of
循环内部调用的是数据结构的 Symbol.iterator
方法。
for...of
循环可以使用的范围包括数组、Set 和 Map 结构、某些类似数组的对象(比如 arguments
对象、DOM NodeList 对象)、后文的 Generator 对象,以及字符串。
优点:避免了for in的所有缺点,可以使用break,continue和return.
缺点:不适用于处理原有的原生对象(原生对象是一个子集,包含一些在运动过程中动态创建的对象)
//遍历数组
let arr=["nick","freddy","mike","james"];
for (let item of arr){
console.log(item)
}
//暑促结果为nice freddy mike james
//遍历对象
let person={name:"老王",age:23,city:"唐山"}
for (let item of person){
console.log(item)
}
//我们发现它是不可以的
(三个参数,第一个是value,第二个是index,第三个是数组体)
缺点:不能同时遍历多个集合,在遍历的时候无法修改和删除集合数据,方法不能使用break,continue语句跳出循环,或者使用return从函数体返回,对于空数组不会执行回调函数
优点:便利的时候更加简洁,效率和for循环相同,不用关心集合下标的问题,减少了出错的效率
定义:用于调用数组的每个元素,并将元素传递给回调函数
//我们先用它来遍历数组
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的一个区别
循环名称 | 参数 | 中断方式 |
---|---|---|
for | 1:continue;跳出当次循环,可继续进行下一个循环; 2:break;跳出当前循环,即不在进行此循环;如果是多个for循环嵌套,则不影响外层循环; 3:return;结束函数调用; |
|
for…in | 只有一个参数 item(对象的时候是key值, 数组的时候是index值) | 同上 |
for…of | 只有一个参数 item,它是含有iterator的数据的元素值 | 同上 |
forEach | (三个参数,第一个是value,第二个是index,第三个是数组体) | 实现continue的效果可以直接使用return 实现break的效果可以使用try、throw Error(),通过跳出错误的方式跳出循环。 |
for > forEach > for of >for in