Javascript 数组筛选器方法传递的是数据类型而不是谓词

Javascript 数组筛选器方法传递的是数据类型而不是谓词,javascript,Javascript,我有一个数组,看起来像: var containers = [2,0,false,"", '12', true]; 使用过滤方法时,如下所示: var containers = containers.filter(Boolean); console.log(containers); 它打印:[2,'12',正确] 即使数字、字符串或对象被传递给filter函数,该值仍为真。根据我的理解,filter函数接受一个谓词函数。但是,在这里它接受一个基本数据类型。有人能解释一下这种行为吗?布尔实际上

我有一个数组,看起来像:

var containers = [2,0,false,"", '12', true];
使用过滤方法时,如下所示:

var containers = containers.filter(Boolean);
console.log(containers);
它打印:[2,'12',正确]
即使数字、字符串或对象被传递给filter函数,该值仍为真。根据我的理解,filter函数接受一个谓词函数。但是,在这里它接受一个基本数据类型。有人能解释一下这种行为吗?

布尔实际上是一种函数,除了是一种类型之外。事实上,所有类型在技术上也是功能。如果传递的值为,则布尔函数将返回true。2、12和true都是真实值,因此它们不会被过滤掉。

布尔是一个接受值并返回真实值的构造函数。查看MDN文档:

您传递的是实际的布尔函数,因此您实际上将所有值转换为布尔值,如果值为0且为falsy,则会得到如下结果

查看此过滤器在循环中的工作方式:

Boolean(2); //true
Boolean(0); //false
Boolean(false); //false
Boolean(""); //false
Boolean(12); //true
Boolean(true); //true
我想你要找的是这样的东西:

var containers = [2,0, false ,"", '12', true];
var containers = containers.filter(function(v) { return "boolean" === typeof v});
console.log(containers); //[false, true]
以下是JavaScript中的falsy值列表,供您参考:

未定义:如果值未定义且未定义 null:如果为null,例如如果DOM元素不存在。。。 空字符串: 0:0 南:不是数字 错误的
基元数据类型有一个构造函数,当您将此构造函数传递给筛选器时,它会将基元功能应用于数组的每个值。然后它返回该结果,过滤器将通过应用其谓词检查其真实值

例如,给定containers.filterString

字符串将获得第一个值,比如2,并应用其构造函数并返回2。 然后,过滤器将返回计算结果为true的布尔值2, 确认应返还原件2

但是对于数组中的第四个值 这是不同的。 字符串的计算结果将相同,布尔值将返回false, 这意味着不包括作为过滤器的结果

这适用于应用于过滤器的任何基本体

对于ex.containers.filterNumber

如果数组中的第二个元素为0,
Number0->0->Bollean0->false->not Include作为筛选的结果

我得到了字符串和对象的不同结果,所以我真的不明白你在问什么我的问题是-筛选函数接受一个谓词函数。但这里它也接受数据类型。布尔/字符串/数字是谓词吗?哦,对了,我以为你说的结果总是一样的。。。布尔/字符串/数字/对象是函数