javascript.filter()真布尔值

javascript.filter()真布尔值,javascript,filter,boolean,Javascript,Filter,Boolean,我只需要返回真正的布尔语句,当我运行这段代码时,它就可以工作了。然而,我很困惑,因为我的“if语句”无论是b都有效对或b!==错。有人能解释一下为什么这两种方法都有效吗?您的函数之所以有效,是因为布尔比较中的JavaScript值是“truthy”或“false”。在布尔上下文(比较、if语句等)中使用时,非布尔值被强制为布尔值 如果我理解您的意图,您可以修改您的函数以获得预期的输出,如下所示: function bouncer(arr) { // Don't show a false ID

我只需要返回真正的布尔语句,当我运行这段代码时,它就可以工作了。然而,我很困惑,因为我的“if语句”无论是b都有效对或b!==错。有人能解释一下为什么这两种方法都有效吗?

您的函数之所以有效,是因为布尔比较中的JavaScript值是“truthy”或“false”。在布尔上下文(比较、if语句等)中使用时,非布尔值被强制为布尔值

如果我理解您的意图,您可以修改您的函数以获得预期的输出,如下所示:

function bouncer(arr) {
  // Don't show a false ID to this bouncer.
    function a(b) {
      if(b !== false) {
        return b;
      }
    }

    arr = arr.filter(a);
    return arr;
}

bouncer([7, 'ate', '', false, 9]);

这是因为您返回了值。filter函数应返回true或false,如下所示:

function bouncer(arr) {
  // Don't show a false ID to this bouncer.
    function a(b) {
      if(typeof(b) === 'boolean' && !b) {
        return new Boolean(b);
      }
    }

    arr = arr.filter(a);
    return arr;
}

bouncer([7, 'ate', '', false, 9, true]);
或更短:

function bouncer(arr) {
    arr = arr.filter(function(x) { console.log(x === true)
       if(x !== false) {
           return true;
       }
    });
    return arr;
}

我正在解决一个类似的问题,并得出了以下结论:

function bouncer(arr) {
    return arr.filter(function(x) { console.log(x === true)
       return x !== false;
    });
}

最简单的方法是:

function bouncer(arr) {
  return arr.filter(Boolean);
}
bouncer([7, 'ate', '', false, 9]);
// returns ['7','ate','9']
显然是在ES5中引入的

这确实帮助我了解了这里发生的一切。希望有帮助

基本上,写作:

function bouncer(arr) {
    return arr.filter(x => !!x);
}
arr.filter(Boolean)
与写作相同:

function bouncer(arr) {
    return arr.filter(x => !!x);
}
arr.filter(Boolean)
因为也是一个函数,当为真时返回truthy,当为假时返回falsy

例如:

var a=[1,2,“b”,0,{},“,NaN,3,未定义,null,5];
var b=a.filter(布尔);//[1,2,b”,{},3,5];

资料来源:。

我偶然发现了这个练习,并在玩弄它。它最终帮助我更好地理解它,所以如果你可以的话,我将为这个bouncer函数添加一点清晰性

arr.filter( function(x) { return Boolean(x); }); 

使用
arr.filter(布尔值)
simpler@NickA为什么filter(Boolean)将falsy确定为falsy,而Boolean(false)是truthy?@user25976 a
Boolean
是一个对象,所有对象都是truthy,但是原语
false
只是
false
您不需要
!!x
。只是
arr.filter(x=>x)
足够了。@user25976
Boolean(false)
返回
false
new Boolean(false)
返回一个对象。关键词
new
起到了作用。相关-这里有这么多人甚至没有回答你提出的实际问题,真是令人惊讶。