javascript - 数组过滤方法传递数据类型而不是谓词

标签 javascript

我有一个看起来像这样的数组:

var containers = [2,0,false,"", '12', true];

当使用 filter 方法时,如下所示:

var containers = containers.filter(Boolean);
console.log(containers);

它打印:[ 2, '12', true ] 即使将 NumberStringObject 传递给 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 中的假值列表,供您引用:

  1. 未定义:如果该值未定义且为未定义
  2. null:如果为 null,例如 DOM 元素不存在...
  3. 空字符串:''
  4. 0:数字零
  5. NaN:不是数字

关于javascript - 数组过滤方法传递数据类型而不是谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49205417/

相关文章:

javascript - 为什么两个相同的对象彼此不相等?

javascript - 跳过用户输入的文本字符串中的特殊字符并在 Javascript 中的每个单词后添加连字符

javascript - 进行中的 Ajax 请求突然开始返回状态 = 0

javascript - 为整个React App制作通用函数

javascript - Node.js 服务器如何处理请求?

javascript - 使用全局模式修饰符和前瞻

javascript - CSS 类选择器样式未在 React 元素中应用

javascript - parseInt 最后一个数字并保存为变量

javascript - Jquery 到 Mootools

用于 MP3 播放的 JavaScript