嘿,伙计们正在绞尽脑汁,阅读关于这个主题的文章,我读到的所有内容都说明了#34;一些字符串"或" a"被认为是真的,但当我编写一个代码来测试一个数组来过滤掉有价值的项目时,它一直在说字符串和字符是假的。我知道如何使用.filter(布尔)解决这个问题,但想知道为什么我的代码不起作用这是我的代码
function bouncer(arr) {
// Don't show a false ID to this bouncer
var idVar = [];
for(var i = 0; i<arr.length + 1;i++)
{
if(arr[i] === false|| arr[i]===0 || arr[i]==="" || arr[i]===null || arr[i]===undefined || isNaN(arr[i]) === true)
{
alert(arr[i]);
}
else
{
idVar.push(arr[i]);
}
}
alert(idVar + " is the only one");
}
bouncer([1,"some string"]);
&#13;
答案 0 :(得分:3)
isNaN(arr[i]) === true
导致它通过。 "some string"
将被强制转换为数字,然后isNaN将评估为真。
请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN#Examples
答案 1 :(得分:0)
对于您的情况, isNaN(“某些字符串”)将 true 。
尝试:
if (arr[i]) {
}
请记住,您也可以替换
if (arr[i] == false) {
}
通过
{{1}}
===还会比较值的类型。
答案 2 :(得分:0)
正如其他人所指出的那样,问题在于isNaN(arr[i])
,因为无法解析为数字的字符串将被强制转换为NaN
。如果您想使用isNaN
,则应首先测试它是否为数字。所以替换
isNaN(arr[i]) === true
使用:
(typeof arr[i] === 'number' && isNaN(arr[i]))
您也可以使用Number.isNaN(arr[i])
。这并不是首先将其参数强制转换为数字,因此如果参数不是数字,则返回false
。