Javascript 为什么我的布尔值返回';未定义';?

Javascript 为什么我的布尔值返回';未定义';?,javascript,node.js,boolean,logical-operators,reduce,Javascript,Node.js,Boolean,Logical Operators,Reduce,我正在研究雄辩的Javascript,有一个练习是制作一个每个函数,它接受一个数组和一个函数,并根据数组中的所有项在完成函数后返回的内容返回true或false 我很困惑,因为当我在函数中执行console.log()时,我会得到两次布尔值……但是当我执行console.log(every(arr,func))时,我会得到未定义的 var every = function(arr, req){ arr.map(function(item){ return req(item

我正在研究雄辩的Javascript,有一个练习是制作一个
每个
函数,它接受一个数组和一个函数,并根据数组中的所有项在完成函数后返回的内容返回true或false

我很困惑,因为当我在函数中执行console.log()时,我会得到两次布尔值……但是当我执行console.log(every(arr,func))时,我会得到
未定义的

var every = function(arr, req){
    arr.map(function(item){
        return req(item);
    }).reduce(
        function(total, num){

            // this returns: true
            //               true
            console.log(total && num);

            return total && num;
    });


}

// This returns undefined
console.log(every([NaN, NaN, NaN], isNaN));
那么,为什么我在函数中得到两次
true
,为什么我得不到定义呢


我使用node作为控制台。

您需要在最外层的函数中添加一个return语句,如下所示:

var every = function(arr, req){
    return arr.map(function(item){
        return req(item);
    }).reduce(
        function(total, num){ 
            return total && num;
    });
}

// This returns true
console.log(every([NaN, NaN, NaN], isNaN));

编辑:固定返回值,谢谢@Kevin B

您从未从
each
返回任何内容,因此
console.log(each(…)
将始终是未定义的。除了缺少的
返回
,您真的应该使用
arr.each(req)
,如果您选择了
reduce
,那么您应该始终传递一个初始累加器值来覆盖空数组。@KevinB绝对是,我的错。