扫码关注官方订阅号
function bouncer(arr) { rule=[false,null,0,"",undefined,NaN]; changed=[]; for (i=0;i
为何不输出6个true?
如何达到我的意图,输出6个true?
欢迎选择我的课程,让我们一起见证您的进步~~
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); } }
仔细看你代码中break的位置。
break
里面那个循环执行一次就break了当然不是6个true了。
你也不看看你的break在那里。
你的逻辑写错了,看这几句话——
for(j=0;j<6;j++){ if(arr[i]===rule[j]){dis=true;} break; }
这会是什么情况?j循环第一次之后,直接运行break,跳出了当前循环,然后就会直接输出false。那么,当然就只有rule[0]匹配到了,也就是只有一个true。那么,这里的代码应该改成这样,匹配到了之后再跳出——
j
false
rule[0]
true
for(j=0;j<6;j++){ if(arr[i] === rule[j]){ dis = true; break; } }
改成这样之后,会输出5个true和1个false,为什么还会有个false?因为NaN不等于其自身,像这样——
NaN
NaN === NaN //false
第 1 次:false === false
result:true
第 2 次:null === false
result:false
第 3 次:0 === false
result:false...第 6 次:"" === false
因为 break 导致每次内循环只循环了 1 次,每次循环都用 false 来比较,这就是为什么会输出 1 次 true,5 次 false 的原因。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
仔细看你代码中
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 的原因。