for,forEach,map,for of,for in 的使用与区别

101 阅读2分钟

一、for循环(数组方法)

特点:

  • 不改变原数组,不返回新数组;有索引
  • continue:跳出当前循环,直接进入下一次循环;break跳出循环本身,不再进行之后的循环,但可以执行for循环之外的的语句;return:跳出for循环,且循环之外的语句也不会执行;

注:跳出要在函数内,不然会报错

function test(){
  var ary=[1,2,3];
  for (var i=0;i<ary.length;i++){
    console.log(arr[i])
  }
}
test();
//输出 1 2 3

function test(){
  var ary=[1,2,3];
  for (var i=0;i<ary.length;i++){
    if(i>1){
      continue;
     }
     console.log(ary[i])
  }
}

//输出 1 2
function test(){
  var ary=[1,2,3];
  for (var i=0;i<ary.length;i++){
    if(i>1){
      break;
     }
     console.log(ary[i])
  }
  console.log('外面的')
}

// 输出 1 2 外面的

function test(){
  var ary=[1,2,3];
  for (var i=0;i<ary.length;i++){
    if(i>1){
      return false;
     }
     console.log(ary[i])
  }
  console.log('外面的不会输出')
}
// 输出 1 2

二、forEach遍历(数组方法)

特点

  • 不改变原数组
  • 输出索引值和数组值,不会输出数组的原型对象
  • 没有返回值,不能使用bread和return结束循环
        Array.prototype.newWord = function () {
            console.log("Hello");
        }
        Array.prototype.nesStr = 4
        var ary = [1, 2, 3]
        ary.name = '数组'

        ary.forEach((value, i) => {
            console.log(value);
            console.log(i);       
        })
        // 输出  1 0 2 1 3 2

三、map (数组方法)

特点

  • 不改变原数组,返回新数组
  • 可以使用break中断循环,可以使用return返回到外层函数
var ary = [1, 2, 3]
var newAry=ary.map(item=>{
  item+=1
})
// newAry=[2,3,4]

四、for of 遍历

特点

  • 不能遍历对象,不改变原数组
  • 可以使用bread/continue/return
  • item为索引数组值,不是索引值
var ary = ['a', 'b', 'c']
for(item of ary){
  console.log(item);
  console.log(ary[item])
}
// 输出  0 undefined 1 undefined 3 undefined

五、for in 遍历 (大部分用于对象)

特点

  • 不改变原数组
  • 用于循环遍历数组或对象属性
  • item为键名
  • 可枚举输出原型对象上的值
  • 不可以使用bread/continue/return
   let person={name:"小小",age:18}
   let text=""
   for (let item in person){
      console.log(item)
      console.log(person[item])
   }
   //输出 name 小小 age 18

   let arry=[1,2,3,4,5]
   for (let i in arry){
        console.log(arry[i])
    }
// 输出 1 2 3 4 5

Array.prototype.nesStr = 4
var ary = [1, 2, 3]
ary.name = '数组'

for (let i in ary){
        console.log(i)
    } 
//输出 0 1 2 name nesStr

遍历速度

  • 少量数据耗时差别不大
  • 大量数据耗时:for循环遍历 < for...of遍历 < forEach遍历 < for...in遍历 < map遍历