过滤器(字符串)也返回数字
filter(String) also return number
谁能解释为什么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
中过滤?
谢谢。
.filter()
API 将每个数组元素值传递给您提供的函数。该函数返回的值被强制转换为布尔值并进行测试。从 .filter()
返回的数组中仅包含true
结果。
Number 构造函数将其参数解释为数字,并返回其值。当它被.filter()
机制传递给字符串"a"时,它返回NaN
,解释为false
。
String 构造函数执行类似的操作,但关键区别在于,几乎任何东西都可以成为良好的有效字符串。 因此,数组中1
的数字以"1"
形式返回,当转换为布尔值时,true
因为它是一个非空字符串。
和字符串构造函数不会对数字或字符串值执行任何类型的是/否标识,因此不能使用它们按类型筛选数组中的值。
Pointy的回答解释了为什么你会看到这种行为。
要实现您似乎想要做的事情,您应该使用:
var arr = [1, "a", '7'],
numArr = arr.filter(function(o) { return typeof(o) === "number"; }),
strArr = arr.filter(function(o) { return typeof(o) === "string"; });
相关文章:
- 当与另一个实例进行比较时,我的类实例如何隐式返回数字
- Javascript函数用于检查数字并返回
- 如何让计算机猜测一个数字并返回猜测次数(Javascript)
- JScalc.io计算器基本故障(输出变量为空,不返回数字)
- 乘法后,js 返回数字和 NaN
- NaN 从 JavaScript 函数返回,而警报返回数字
- 过滤器(字符串)也返回数字
- typeof(“2px”-1)返回数字;2px〃-1返回NaN.为什么?
- Javascript-将2个数字和返回数字相乘
- 对于负数返回false,对于正数(或零)返回数字本身的最短表达式
- 如何让这个脚本返回数字0-9而不是1-10
- 如何使用javascript为字符串中的每个字母返回数字
- jQuery - .length返回“数字”不是一个函数
- 从javascript函数返回数字0
- 对于bigint, Array_to_json返回数字而不是字符串
- 修改下面的排序函数,使其返回数字
- 在AngularJS中输入返回数字而不是字符串
- 为什么不't var x.isNaN,其中x=1/0返回数字
- Javascript函数返回数字而不是对象
- 只从字符串返回数字