为什么arr.filter(String)也返回数字? [英] Why arr.filter(String) returns also numbers?

查看:75
本文介绍了为什么arr.filter(String)也返回数字?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在做一些小练习以使我对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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆