【问题标题】:Using "Boolean" as the argument to .filter() in JavaScript在 JavaScript 中使用“布尔”作为 .filter() 的参数
【发布时间】:2015-06-04 05:06:04
【问题描述】:

最近了解到可以使用Boolean关键字来判断一个布尔值是否为false,例如

    function countSheeps(arrayOfSheeps) {
          return arrayOfSheeps.filter(Boolean).length;
    }

arrayOfSheeps 只是一个布尔值数组。由于我一直无法找到有关使用“布尔”作为关键字的任何信息,因此我想知道该词是否还有其他用途,或者甚至只是我可以用来了解它的任何资源。

【问题讨论】:

标签: javascript boolean


【解决方案1】:

Boolean 不是关键字,它是function,函数只是对象,可以传递。同理:

return arrayOfSheeps.filter(function(x){return Boolean(x)}).length;

既然function(x){return f(x)} === f那么你可以简化:

return arrayOfSheeps.filter(Boolean).length;

【讨论】:

  • 谢谢,我明白现在发生了什么。作为记录,我在 Codewars.com 上发现了该代码作为问题的答案,并被选为最佳实践。这就是为什么我想了解它。在这个网站上获得反对票不是很难,是吗?
【解决方案2】:

基于MDN Boolean

不要使用布尔对象将非布尔值转换为 布尔值。要执行此任务,请改为使用 Boolean 作为 功能

var x = Boolean(expression);     // use this...
var x = !!(expression);          // ...or this
var x = new Boolean(expression); // don't use this!

所以代码是一样的:

const b = v => !!v;
arrayOfSheeps.filter(b).length;
arrayOfSheeps.filter(v => !!v).length;  // or inline 

【讨论】:

    猜你喜欢
    • 2015-07-13
    • 2018-02-07
    • 2020-03-16
    • 2018-07-03
    • 1970-01-01
    • 2014-07-02
    • 2019-12-29
    • 2016-11-30
    • 1970-01-01
    相关资源
    最近更新 更多