为什么arr.filter(String)也返回数字? [英] Why arr.filter(String) returns also numbers?
问题描述
我正在做一些小练习以使我对js怪癖的知识有所了解。我试图编写一些简单的过滤器,使我返回一个包含某些元素的新数组,其中某些元素是字符串,数字,ecc...。当给定数组中也有数字时,arr.filter(String)会产生什么使我感到惊讶。
I am doing some little exercises to mantain fresh my knowledge of js quirks. I tried to write some simple filters that returns me a new array containing certain elements wheater they are string, numbers, ecc ... and I was surprised of what arr.filter(String) produces when in the given array there are also Numbers.
function onlyString(arr) {
return arr.filter(String);
}
onlyString([2, 4, "", "omg", ]) // returns [2, 4, "omg"]
然后我想看看arr.filter(Number)将重新运行
Then I wanted to see what arr.filter(Number) would retrun
function onlyString(arr) {
return arr.filter(Number);
}
onlyString([2, 4, "", "omg", ]) // returns [2, 4]
此外,我在arr中添加了一个空对象以查看会发生什么情况:
Also, I added an empty object inside arr to see what would happen:
function onlyString(arr) {
return arr.filter(Object);
}
onlyString([2, 4, "", "omg", {}]) // returns [2, 4, "", "omg", {}]
在第一眼,我在这里困惑,但后来我认为return数组是正确的,因为在js中,所有东西都是对象,或者在这种情况下我是对的吗?
At first sight, here, I was more confused but then I thought that the return array is correct because in js everything is an object, or am I right in this case?
顺便说一句,我真的很想了解字符串过滤器的内幕发生了什么,希望对您有帮助
By the way, I really want to understand what happened under the hood in the String filter, hope you can help me
推荐答案
Array.filter
会过滤掉 arr
值,具体取决于传入的函数
的结果。如果为true,则将其存储在数组中。如果错误,则将其从数组中删除。
Array.filter
will filter out arr
values depending on the result of function
passed in it. If it's true, it will be stored in the array. If it's false, it will be removed from the array.
现在,如果您检查 String()
, Number()
& Object()
,您将看到过滤出的值为false的值,例如,0,NaN
。其他返回数组。
Now, if you check the result of String()
, Number()
& Object()
, you will see that the values evaluating to false for example "", 0, NaN
are filtered out. Others are returned in the array.
function onlyString(arr) {
return arr.filter(String);
}
console.log(String(2), String(4), String(""), String("omg"));
console.log(onlyString([2, 4, "", "omg", ]));
function onlyNumber(arr) {
return arr.filter(Number);
}
console.log(Number(2), Number(4), Number(""), Number("omg"));
console.log(onlyNumber([2, 4, "", "omg", ]));
function onlyObject(arr) {
return arr.filter(Object);
}
console.log(Object(2), Object(4), Object(""), Object("omg"));
console.log(onlyObject([2, 4, "", "omg", {}]));
这篇关于为什么arr.filter(String)也返回数字?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!