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



我正在自己练习Javascript,我有一个问题。

我制作了一个名为"every"的函数,它包含两个参数。第一个参数是数组,第二个参数是布尔函数。"every"函数的作用是将布尔函数应用于数组中的每个元素,如果每个元素都返回true,而"every"函数返回true,则为false。

例如

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(元素)应该与isNaN(元素)相同。

.forEach()版本中的return语句从.forEach()回调返回,而不是从封闭函数返回。

您的应用程序对于.forEach()来说并不是一个很好的用例。您并不真的想为数组中的每个元素执行函数:您只想处理数组直到第一个false元素。Array原型已经有一个.every(),所以您可以使用它,但您的函数的全部要点将受到质疑:)

最新更新