function bouncer(arr) {
  rule=[false,null,0,"",undefined,NaN];
  for (i=0;i<arr.length;i++){
    dis=false;
    for(j=0;j<6;j++){
      if(arr[i]===rule[j]){dis=true;}
      break;
    }
    console.log(dis);
  }
}

bouncer([false, null, 0, NaN, undefined, ""]);


我想得到六个true作为输出,而不是一个true和五个false。
原因很明显:
第一次:假===假
结果:真
第二次:null === false
结果:false
第三次:0 === false
结果:false
直到第六次,原因相同:“” === false
结果:假

如何修复我的代码以获得所需的结果?

最佳答案

您应该将功能更改为此:



function bouncer(arr) {
  rule=[false,null,0,"",undefined,NaN];
  for (i=0;i<arr.length;i++){
    dis=false;
    for(j=0;j<6;j++){
      if(arr[i]===rule[j] || isNaN(arr[i]) && isNaN(rule[j])){
        dis=true;
        break;
      }
    }
    console.log(dis);
  }
}

bouncer([false, null, 0, NaN, undefined, ""]);





它有两个变化:


您应该在找到匹配项时打破内部循环,而在没有找到匹配项时继续(相反)
您应该对NaN执行特殊检查,因为JavaScript considers NaN !== NaN

10-08 07:53
查看更多