js 的四种for循环(forEach的返回值异常),测试满足条件的return效果
for
结论:
-
for中,return直接
结束for循环和外部函数
,并且循环返回值是函数的值 - 可以在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
结论:
-
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
结论:
-
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 – 重点
结论:
- 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;
}
版权声明:本文为lk2913128603原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。