Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript switch语句中的JS逻辑运算符-OR、AND(';|';';';';)_Javascript_Switch Statement_Logical Operators - Fatal编程技术网

Javascript switch语句中的JS逻辑运算符-OR、AND(';|';';';';)

Javascript switch语句中的JS逻辑运算符-OR、AND(';|';';';';),javascript,switch-statement,logical-operators,Javascript,Switch Statement,Logical Operators,除注释中注意到的情况外,以下功能正常工作,即,对于每个数字: 如果这个数字可以被三整除,我想注销单词fizz,而不是那个数字 如果这个数字可以被5整除,我想注销单词buzz,而不是那个数字 如果一个数字可以被3和5整除,我想注销单词fizzbuzz,而不是那个数字 示例-1 const FizzBuzz=(num)=>{ 对于(设i=1;i例1中的代码有效,因为您打开了设置为0的变量foo。 第一种情况下的代码计算为0: 15 % 3 || 15 % 5 = 0 该值与foo进行比较,f

除注释中注意到的情况外,以下功能正常工作,即,对于每个数字:

  • 如果这个数字可以被三整除,我想注销单词
    fizz
    ,而不是那个数字
  • 如果这个数字可以被5整除,我想注销单词
    buzz
    ,而不是那个数字
  • 如果一个数字可以被3和5整除,我想注销单词
    fizzbuzz
    ,而不是那个数字
示例-1

const FizzBuzz=(num)=>{

对于(设i=1;i例1中的代码有效,因为您打开了设置为0的变量foo。 第一种情况下的代码计算为0:

15 % 3 || 15 % 5 = 0
该值与foo进行比较,foo为0,因此JS代码进入第一种情况

在JavaScript中,逻辑OR运算符始终返回第一个“truthy”值


问题是您正在打开
foo
,并且
foo
为0,因此
case
将在
计算结果为
0
时运行

因此,
案例i%3
在预期的情况下运行,因为您希望
i%3
案例在其计算结果为0时运行。对于
i%5
,情况也是如此

case (i % 3 || i % 5)
,当
i
是15的倍数时,解析为

case (15 % 3 || 15 % 5)
->

因为
0
是错误的,
|
将意味着
15%3
15%5
必须是
0
,才能将
案例解析为
0
(从而匹配
foo
0

如果使用了
&&
,则
&&
表达式将计算为第一个假值,而不是要求两个
%
都解析为
0
,例如当
i
为3:

case (3 % 3 && 3 % 5)
->

->

然后匹配
foo
0
,尽管
&&
中只有一个条件解析为0

这是非常不直观的。不要在这里使用
switch
。如果必须使用
switch
,我强烈建议将
foo
设置为
true
,并使用
==0
测试:

const FizzBuzz=(num)=>{

例如(设i=1;例2中的情况正确,但例1中没有进行比较。
(i%3 | i%5)
您需要使用
==
否,对于本练习,您绝对不应该使用
switch
。是的,没错!我一直忽略了
0
等于
false
,现在我了解到switch语句在大小写值与头表达式的匹配中有严格的比较。Thnx!希望如此这个问题对某人很有用。
case (0 || 0)
case (3 % 3 && 3 % 5)
case (0 && 2)
case 0