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 (会继续执行循环后面的代码)