Javascript isNaN 在作为参数传递时返回未定义

Javascript isNaN returning undefined when passed as argument

我正在自学Javascript,我有一个问题。

我创建了一个名为 "every" 的函数,它接受 2 个参数。 第一个参数是一个数组,第二个参数是一个布尔函数。 "every" 函数的作用是将布尔函数应用于数组中的每个元素,如果每个元素都 returns 为真,并且 "every" 函数 returns 为真,否则为假.

例如,

console.log(every([NaN, NaN, NaN], isNaN));
// → true
console.log(every([NaN, NaN, 4], isNaN));
// → false

我想出了一个解决方案,它奏效了。

function every(array, bool) {
    for (var i = 0; i < array.length; i++) {
        if (!bool(array[i]))
            return false;
    }
    return true;
}

但是,我尝试将 forEach 合并到函数中并想出了这个

function every(array, bool) {
    array.forEach(function(element) {
        if(!bool(element)) 
            return false;
    });
    return true;
}

但是第二个不行。我用 http://www.pythontutor.com/ 跟踪了每个执行步骤 并发现函数的 "bool(element)" 部分给我未定义而不是 true 或 false。 所以我的问题是为什么它给我未定义?因为在这种情况下 bool(element) 应该与 isNaN(element) 相同。

.forEach() 版本 returns 中的 return 语句来自 .forEach() 回调,而不是来自您的封闭函数。

您的应用程序并不是 .forEach() 的好用例。您真的不想为数组中的 each 元素执行函数:您只想处理数组直到第一个 false 元素。 Array 原型已经有一个 .every(),所以你可以使用它,但是你的函数的整个点都会有问题:)