js 的四种for循环(forEach的返回值异常),测试满足条件的return效果

js 的四种for循环(forEach的返回值异常),测试满足条件的return效果

for

结论:

  1. for中,return直接 结束for循环和外部函数,并且循环返回值是函数的值
  2. 可以在for中操作数组长度,数组每次循环都会去判断长度,但是需要对i做对应加减
setFor() {
    let a = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    for (let item = 0; item < a.length; item++) {
      console.log(a[item]);
      if (a[item] === 4) {
        return a[item];
        console.log("是");
      }
    }
    console.log("for函数的return是否会执行");
  }
console.log(this.setFor()) // 4
/* 
for 打印:1,2,3,4 4
结论:for中函数没有函数作用域,return直接结束for循环和外部函数,并且返回值时函数的值
*/

for in

结论:

  1. for in 中,return直接结束for in循环和外部函数,并且循环返回值是函数的值
setFor() {
    let a = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    for (let item in a) {
      console.log(a[item]);
      if (a[item] === 4) {
        return a[item];
        console.log("是");
      }
    }
    console.log("for函数的return是否会执行");
  }
console.log(this.setFor()) // 4
/* 
for 打印:1,2,3,4 4
结论:for in中函数没有函数作用域,return直接结束for循环和外部函数,并且返回值时函数的值
*/

for of

结论:

  1. for of 中,return直接结束for of循环和外部函数,并且循环返回值是函数的值
setFor() {
    let a = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    for (let item in a) {
      console.log(a[item]);
      if (a[item] === 4) {
        return a[item];
        console.log("是");
      }
    }
    console.log("for函数的return是否会执行");
  }
console.log(this.setFor()) // 4
/* 
for 打印:1,2,3,4 4
结论:for in中函数没有函数作用域,return直接结束for循环和外部函数,并且返回值时函数的值
*/

forEach - 重点

结论:

  1. forEach中,return不会结束forEach循环,不会跳出函数,函数返回值为空
setFor() {
    let a = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    a.forEach((item) => {
      console.log(item);
      if (item === 4) {
        return item;
        console.log("是");
      }
    });
    console.log("for函数的return是否会执行");
  }
console.log(this.setFor()); // undefined
//forEach打印:1, 2, 3, 4, 5, 6, 7, 8, 9 for函数的return是否会执行

forEach异常情况 - 例子

  • 因为 forEach 的 return 不会直接结束循环和函数,当满足条件时,也不会直接返回true,结果始终为假
  • 使用其他的for可以解决这个问题
fors: any[] = [1,12,54,1,6,156,1,245,1,5,1,4,51,687,1,684,18,416];
// 数组中满足条件(存在 数字 1 )打印 ‘为真’
doSubmit(): void {
    console.log('表单提交');
    // 函数返回 undefined
    if (this.doFlage()) {
      console.log('为真');
    } else {
      console.log('为假');  //始终打印
    }
  }
  doFlage() {
      //异步存在问题,利用for循环解决
    this.fors.forEach((item, index) => {
      if (item == 1) {
        console.log(index);
        return true;
      }
    });
    return false;
  }

猜你喜欢

转载自blog.csdn.net/lk2913128603/article/details/121791426