为什么字符或字符串在javascript中被认为是假的

时间:2017-04-07 18:33:09

标签: javascript arrays boolean

嘿,伙计们正在绞尽脑汁,阅读关于这个主题的文章,我读到的所有内容都说明了#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;
&#13;
&#13;

3 个答案:

答案 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