Array.prototype.filter()何时检查伪造的值?

时间:2019-05-03 09:54:44

标签: javascript ecmascript-6

我偶然发现this great function从数组中删除falsy values

let other = array.filter(item => item);

但是我不知道这怎么工作。据我了解,在MDN上对Array​.prototype​.filter()的解释:

  

filter()方法创建一个新数组,该数组包含所有通过提供的功能实现的测试的元素。

以下代码应该与上面的代码相同(并且确实提供相同的输出):

function foo(item) {
  return item;
}

let other = array.filter(foo);

但是foo()仅返回所有伪造的值,如您在下面的代码片段中所见(如预期)。 如果伪造的值确实通过了提供的功能 ,什么时候进行过滤?

let array = ['foo', undefined, false, 'bar'];

function foo(item) {
  return item;
}

array.forEach(item => console.log(foo(item)));

编辑:我的问题存在一些误解:我知道我没有在代码段中使用filter()。这是因为其唯一目的是表明所有值通过通过foo()函数,这在当时似乎与以下内容矛盾: [...] all通过提供的功能实现的测试的元素。

看一下Polyfill和它的描述,我现在理解了为什么它能如此工作。谢谢@adiga。我不完全理解 [...]返回的值强制为true ,因为英语不是我的母语,但我想这意味着 [...]返回的含义仅有真实值

1 个答案:

答案 0 :(得分:1)

我不确定我是否正确理解了问题,但是filter仅返回过滤器回调返回被强制为true的值(即非虚假的)的值。 / p>

这就是为什么过滤掉虚假值仅需要过滤器函数返回值本身的原因。

(回调函数还可以显式地返回带有!!value的布尔值,这将执行相同的操作。)