当作为参数传递时,Javascript isNaN返回undefined

时间:2015-11-29 00:27:31

标签: javascript arguments undefined higher-order-functions

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

我创建了一个名为“every”的函数,它接受了2个参数。 第一个参数是一个数组,第二个参数是一个布尔函数。 “每个”函数的作用是将布尔函数应用于数组中的每个元素,如果每个元素都返回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)”函数的一部分给了我undefined而不是true或false。 所以我的问题是为什么它给我未定义?因为在这种情况下bool(element)应该与isNaN(element)相同。

1 个答案:

答案 0 :(得分:1)

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

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