嗨,大家一直在绞尽脑汁,阅读关于这个主题的文章,我读过的所有陈述的“一些字符串”或“一个”都被认为是真的,但是当我编写代码测试一个数组来过滤掉它所说的字符串和字符是虚假的虚假物品。我不知道如何使用.filter(布尔)来解决这个问题,但想知道为什么我的代码不会在这里工作是我的代码为什么字符或字符串被认为是在javascript中的falsy
嗨,大家一直在绞尽脑汁,阅读关于这个主题的文章,我读过的所有陈述的“一些字符串”或“一个”都被认为是真的,但是当我编写代码测试一个数组来过滤掉它所说的字符串和字符是虚假的虚假物品。我不知道如何使用.filter(布尔)来解决这个问题,但想知道为什么我的代码不会在这里工作是我的代码为什么字符或字符串被认为是在javascript中的falsy
的isNaN(arr[i]) === true
导致它通过。 "some string"
将被强制为一个数字,然后isNaN将评估为true。
见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN#Examples
对于你的情况,isNaN( “一些字符串”)将真正。
尝试:
function filter(arr) {
var filteredArray = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i]) {
filteredArray.push(arr[i]);
}
}
return filteredArray;
}
记住,你也可以通过
if (arr[i] == false) {
}
更换
if (arr[i]) {
}
===还比较了类型的值。
正如其他人指出的那样,问题在于isNaN(arr[i])
,因为无法解析为数字的字符串将被强制为NaN
。如果你想使用isNaN
,你应该先测试它是否是一个数字。所以更换
isNaN(arr[i]) === true
有:
(typeof arr[i] === 'number' && isNaN(arr[i]))
您还可以使用Number.isNaN(arr[i])
。这不会首先将其参数强制转换为数字,如果参数不是数字,则返回false
。
@dandavis谢谢,我补充说,答案。 – Barmar
要澄清,哪些比较(等)你在质疑? –
要检查'arr [i]'是否是虚假的,只要做这个'if(arr [i])'就足够了! 'if(arr [i]){truthy} else {falsy}'!或者使用'NOT!''if(!arr [i]){falsy}'! –