[英]Array forEach not returning boolean
誰能給我一些關於為什么前兩個函數返回未定義而不是布爾值的見解?
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;
}
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); }
如果選中此檢查返回值部分,則返回未定義。
Foreach沒有任何返回類型,可以使用一些 。 如果必須使用foreach,則可以像在test2
一樣使用temp變量並在foreach中進行更改
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; }
說明
當函數沒有顯式返回時。 默認情況下,JavaScript函數為該函數返回undefined
。
供參考,請看下面的示例。 在這里,內部console.log('hello')
正在打印hello
但是由於undefined
來自內部console.log()
返回隱式返回值,因此外部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; }
Array#forEach
不會返回特殊值,具體取決於回調的內部返回值。 它只是迭代所有項目。
Array#some
或其對應的Array#every
提前返回,具體取決於回調的返回值。
在使用ES6時,如果移交的值是數組的一部分,則可以使用Array#includes
,它返回一個布爾值。
const array1 = [1, 2, 3]; console.log(array1.includes(2)); // true
forEach返回未定義。 您要在情況下使用的是array.includes
const array1 = [1, 2, 3]; function test1() { return array1.includes(2); } const test1Result = test1(); console.log(test1Result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.