关于前两个函数为何返回未定义而不是布尔值的问题,有人可以给我一些启示吗?
https://jsfiddle.net/wjf2gr9d/
const array1 = [1, 2, 3];
const test1Result = test1();
const test2Result = test2();
const test3Result = test3();
console.log(test1Result);
console.log(test2Result);
console.log(test3Result);
function test1() {
return array1.forEach(x => 2 === x);
}
function test2() {
const found = array1.forEach((x, index) => {
if (2 === x) {
return true;
}
return false;
});
return found;
}
function test3() {
const maybeTeam = array1.find(x => 2 == x);
return (maybeTeam) ? true : false;
}
答案 0 :(得分:1)
forEach
始终返回undefined
;无论return <arr>.forEach
中的逻辑如何,undefined
都会总是返回forEach
。如果要检查数组中的任何项目是否通过特定测试,则应改用.some
:
const array1 = [1, 2, 3];
const test1Result = test1();
console.log(test1Result);
function test1() {
return array1.some(x => 2 === x);
}
答案 1 :(得分:1)
如果您选中this的返回值部分,则返回未定义。
Foreach没有任何返回类型,可以使用some。如果必须使用foreach,则可以像在test2
const array1 = [1, 2, 3];
const test1Result = test1();
const test2Result = test2();
const test3Result = test3();
console.log(test1Result);
console.log(test2Result);
console.log(test3Result);
function test1() {
return array1.some(x => 2 === x);
}
function test2() {
var found = false;
array1.forEach((x, index) => {
if (2 === x) {
found = true;
}
});
return found;
}
function test3() {
const maybeTeam = array1.find(x => 2 == x);
return (maybeTeam) ? true : false;
}
答案 2 :(得分:1)
说明
当函数没有显式返回时。默认情况下,JavaScript函数对该函数返回undefined
。
作为参考,请看下面的示例。此处内部console.log('hello')
正在打印hello
,但由于来自内部console.log()
的返回隐式返回值为undefined
,因此外部console.log()
将打印undefined
。
console.log(console.log('Hello'))
好吧,我建议您看一下更改。您会明白为什么会这样。
const array1 = [1, 2, 3];
test1();
test2();
console.log(test3());
function test1() {
let a = array1.forEach(x => 2 === x);
console.log(a);
return a;
}
function test2() {
const found = array1.forEach((x, index) => {
if (2 === x) {
return true;
}
return false;
});
console.log(found);
return found;
}
function test3() {
const maybeTeam = array1.find(x => 2 == x);
return (maybeTeam) ? true : false;
}
答案 3 :(得分:1)
Array#forEach
不会返回特殊值,具体取决于回调的内部返回值。只是迭代所有项目。
Array#some
或其对应的Array#every
会提前返回,具体取决于回调的返回值。
使用ES6时,如果移交的值是数组的一部分,则可以使用Array#includes
,它返回一个布尔值。
const array1 = [1, 2, 3];
console.log(array1.includes(2)); // true
答案 4 :(得分:0)
forEach返回未定义。您要使用的是array.includes
const array1 = [1, 2, 3];
function test1() {
return array1.includes(2);
}
const test1Result = test1();
console.log(test1Result);