我有一个看起来像这样的数组:
var containers = [2,0,false,"", '12', true];
当使用 filter
方法时,如下所示:
var containers = containers.filter(Boolean);
console.log(containers);
它打印:[ 2, '12', true ]
即使将 Number
、String
或 Object
传递给 filter
函数,这也成立。根据我的理解 filter
函数接受一个作为谓词的函数。然而这里它接受原始数据类型。谁能解释一下这种行为吗?
最佳答案
您传递了实际的 bool 函数,因此您实际上将所有值转换为 bool 值,并且由于 0
和 ""
是假的,您会得到这样的结果。 .
看看这个过滤器在循环中是如何工作的:
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 中的假值列表,供您引用:
- 未定义:如果该值未定义且为
未定义
- null:如果为 null,例如 DOM 元素不存在...
- 空字符串:
''
- 0:数字零
- NaN:不是数字
- 假
关于javascript - 数组过滤方法传递数据类型而不是谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49205417/