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