【发布时间】:2016-05-19 07:12:24
【问题描述】:
我知道 Javascript 类型强制(== vs ===)。
我正在查看 filter() 函数。似乎它默认执行类型强制。它是否正确?代码如下:
var x = [1,2,'hi']
console.log(x.filter(String)); // [ 1, 2, 'hi' ]
console.log(x.filter(Number)); // [ 1, 2]
如果我不希望出现这种情况,我是否必须向过滤器函数添加回调?我很惊讶它以目前的形式工作,因为我认为它总是需要一个回调参数。
【问题讨论】:
-
filter() 应该保留回调返回真实值的元素。您的测试结果反映了这一点。需要参数是什么意思?
String()和Number()函数都带有一个参数... -
看起来,至少乍一看,确实如此。在这种情况下,String 和 Number 是回调,作为 String(1/2/"hi") 运行。 String("hi") == true 返回 false,但是 !!String("hi") 返回 true。但是不确定这在实现方面意味着什么,但看起来它通过函数运行值,然后将结果强制为布尔值。
-
啊啊啊。我不知道String和Number实际上是函数
-
或者至少我没有想到,尽管查看代码以及 filter() 的工作原理,我想这应该很明显
-
请看
0x.filter(Number)--> false!
标签: javascript filter type-coercion