filter(String)也返回数字

时间:2014-11-10 16:02:34

标签: javascript

任何人都可以解释为什么filter(String)也会返回号码吗?



var arr = [1, "a", '7'],
    numArr = arr.filter(Number), // return 1, 7 (It's Ok)
    strArr = arr.filter(String); // Why return 1, a, 7

alert("numArr = " + numArr + "\n" + "strArr = " + strArr);
alert("typeof arr[0] = " + typeof arr[0]);




在上面的示例中,typeof arr[0]number;但是为什么它没有在strArr过滤?

感谢。

2 个答案:

答案 0 :(得分:2)

.filter() API将每个数组元素值传递给您提供的函数。该函数返回的值被强制转换为boolean并进行测试。 true返回的数组中仅包含.filter()个结果。

Number构造函数将其参数解释为数字,并返回其值。当.filter()机制传递字符串“a”时,它返回NaN,其被解释为false

String构造函数执行类似的操作,但关键的区别在于几乎任何东西都是一个好的有效字符串。因此,数组中的1返回为"1",转换为布尔值时为true,因为它是非空字符串。

要说明另一种方式,的情况下,Number和String构造函数执行任何类型的是/否标识数值或字符串值,因此您不能使用它们来过滤数组中的值。

答案 1 :(得分:2)

Pointy的回答解释了为什么你会看到这种行为。

要实现您想要做的事情,您应该使用:

var arr = [1, "a", '7'],
    numArr = arr.filter(function(o) { return typeof(o) === "number"; }),
    strArr = arr.filter(function(o) { return typeof(o) === "string"; });