function bouncer(arr) {
rule=[false,null,0,"",undefined,NaN];
changed=[];
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, ""]);
为何不输出6个true?
如何达到我的意图,输出6个true?
仔细看你代码中
break
的位置。里面那个循环执行一次就break了当然不是6个true了。
你也不看看你的break在那里。
你的逻辑写错了,看这几句话——
这会是什么情况?
j
循环第一次之后,直接运行break
,跳出了当前循环,然后就会直接输出false
。那么,当然就只有rule[0]
匹配到了,也就是只有一个true
。那么,这里的代码应该改成这样,匹配到了之后再跳出——改成这样之后,会输出5个
true
和1个false
,为什么还会有个false
?因为NaN
不等于其自身,像这样——第 1 次:false === false
result:true
第 2 次:null === false
result:false
第 3 次:0 === false
result:false
...
第 6 次:"" === false
result:false
因为 break 导致每次内循环只循环了 1 次,每次循环都用 false 来比较,这就是为什么会输出 1 次 true,5 次 false 的原因。