循环中设置多个条件,有时会得不到自己期望的结果,下面是我对运算符优先级不清楚,造成的错误总结:

1 <script type="text/javascript">
2     var str = prompt("你爱我吗?");
3     while(str != "我爱你" && "我爱你!"){
4         str = prompt("你爱我吗?");
5     }
6 </script>

希望输入"我爱你"和"我爱你!"都可以结束循环。

但是 != 的优先级高于 && 、||,上述代码会先执行str != "我爱你",如果为ture,则为 true && "我爱你!",返回"我爱你!","我爱你!"为ture,循环继续。如果前面为false(输入"我爱你"),false && "我爱你!",返回false,循环结束。即第二个"我爱你!"一直为true,没有意义。逻辑上就是只有输入"我爱你",循环才能结束。

PS:(0、""、"、null、undefined、NaN为假,其余都是真)

修改为:

1 <script type="text/javascript">
2     var str = prompt("你爱我吗?");
3     while(str != "我爱你" && str != "我爱你!"){
4         str = prompt("你爱我吗?");
5     }
6 </script>

先执行两个 != ,再进行 && 运算。两个条件都可以使用。逻辑上就是,输入"我爱你"或者"我爱你!",都可以结束循环。

再分析下逻辑或:

<script type="text/javascript">
     var str = prompt("你爱我吗?");
     while(str != "我爱你" || "我爱你!"){
         str = prompt("你爱我吗?");
     }
</script>

如果输入非"我爱你",则 true || "我爱你!",返回true,循环继续。如果输入"我爱你",则 false || "我爱你!",返回 "我爱你!",结果还是true,循环仍然继续。逻辑上,不管你输入什么,循环都不会停。

<script type="text/javascript">
     var str = prompt("你爱我吗?");
     while(str != "我爱你" || str !="我爱你!"){
         str = prompt("你爱我吗?");
     }
</script>

此处逻辑为,只有在输入的值即为"我爱你",又为"我爱你!",循环才能结束。字符串没有这样的值,因此没有意义。

总结为两个知识点:

  1. 0、""、"、null、undefined、NaN的布尔值为假,其余都是真

  2. JS运算符优先级 "!=" 优先级高于&& 再高于|| 

  

09-02 12:07