for of for in forEach 三者区别

forEach 专门用来循环数组的,可以直接去元素跟index值,存在局限性,

不能continue跳过或者break终止循环,没有返回值,不能return ;如果用 return false 的话,那只会终止不符合条件,会继续执行

eg:

let forEachArr = [

        {age:19,name:"zhq"},

        {age:192,name:"zhq2"},

        {age:19,name:"zhq3"},

];

try {
  forEachArr.forEach(item => {
    // console.log('item');
    // console.log(item);
    if (item.age == 19) {
      // throw new Error("19")
      //   return false  无效果
      // break 报错
      // continue  也是没用的
      console.log("item");
      console.log(item);
      //   continue
    } else {
      // console.log('无效果item');
      // console.log(item);
      //  throw new Error("非19")
      throw new Error(JSON.stringify(item));
      // throw new Error("非19")
    }
  });
} catch (error) {
  // if (error.age != 19) {throw error}
  console.log("error");
  console.log(error);
} finally {
  console.log("finally");
  // console.log(item);
}
let forEachArr = [
  {
    name: "zhq",
    age: 19
  },
  {
    name: "zhq2",
    age: 192
  },
  {
    name: "zhq3",
    age: 19
  }
];

forEachArr.forEach(item =>{
    if (item.age!=19) {
        return false //只中断了不符合条件,会继续执行下去,注意这里不能用break,会报错
    }
    console.log('item');
    console.log(item); // { name: 'zhq', age: 19 } { name: 'zhq3', age: 19 }
})

return false 跟break 区别


let arr = [1, 2, 3, 4];
arr.b = "100";

for (let key in arr) {
    if (arr[key] == 2) {
        // return false
        break
    }
    console.log(key);//  0 
}
console.log(arr) //会打印


for (let key in arr) {
    if (arr[key] == 2) {
         return false
        // break
    }
    console.log(key);//  0 
}
console.log(arr) //不会打印

for in 一般是循环遍历对象的属性,遍历对象本身的所有可枚举属性,以及对象从其构造函数原型中继承的属性key会变成字符串类型

eg:

let obj = {
  name: "zhq",
  age: 18,
  height: "169cm",
  fn: function() {}
};
for (const key in obj) {
  // console.log(key);  // name age height fn
  // if (obj.hasOwnProperty(key)) {
  //     const element = obj[key];
  //     console.log(element); // zhq等(value值)
  // }
}

for of 并不能直接使用在普通的对象上,需要通过和Object.keys()或者Object.vlaues()搭配使用,否则报错

for (const iterator of Object.keys(obj)) {
    console.log("iterator");
    console.log(iterator);
}
for (const iterator of Object.values(obj)) {
    console.log("values");
    console.log(iterator);
}

 for in 跟for of 循环数组的区别,for in 返回的是index下标,for of 返回的是index下标值

eg:

let arr = [1, 2, 3, 4];
arr.b = "100";

for (let key in arr) {
  console.log(key);//  0 1 2 3 4 b 会把b输出来 
}
for (const key of arr) {
    console.log(key); // 1 2 3 4 空(因为函数没有返回值)
}

* 总结:

forEach更多的用来遍历数组

for in 一般常用来遍历对象或json

for of 用来遍历数组非常方便且比较安全

for in循环出的是key,for of循环出的是value

forEach终止循环可以用 return false(终止不符合条件的,会继续执行) 或者 try catch(直接终止,不继续执行)不能用break,会报错

for of 跟 for in 终止可以用return false(后面的代码就被停止执行,可以看前面dome) 或者break (会继续执行循环后面的代码)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值