【发布时间】:2019-02-08 10:02:03
【问题描述】:
以下函数按预期工作,但注释中注意到的情况除外,即对于每个数字:
- 如果该数字可以被三整除,我想注销单词
fizz而不是那个数字 - 如果该数字可以被 5 整除,我想注销单词
buzz而不是该数字。 - 如果一个数字可以被 3 和 5 整除,我想注销单词
fizzbuzz而不是那个数字。
示例 - 1
const FizzBuzz = (num) => {
for (let i = 1; i <= num; i++) {
const foo = 0;
switch (foo) {
case (i % 3 || i % 5): console.log('fizzbuzz');
// expect in this case should be work with logical operator '&&': (i % 3 && i % 5)
break;
case i % 3: console.log('fizz');
break;
case i % 5: console.log('buzz');
break;
default: console.log(i);
}
}
}
FizzBuzz(20)
这就是我所知道的——最好使用 switch-case 语句:
示例 2
switch(true) {
case (i % 3 === 0 && i % 5 === 0): console.log('fizzbuzz');
break;
// etc...
}
但是对于上面的代码实例(示例 1:switch(foo) 没有像 true 这样的常量值),它看起来更加灵活和可读。
据我了解,在“示例 1”中,运算符 || 的工作方式与运算符 && 类似,反之亦然。
“示例 1”作为结果完美运行。但我不明白为什么。我的主要问题是 - 为什么逻辑运算符 OR 在此示例中表现为运算符 AND??
提前谢谢。
【问题讨论】:
-
你在例子2中有一个正确的大小写,但是你没有在例子1中进行比较。
(i % 3 || i % 5)你需要使用=== -
不,对于这个练习,你绝对不应该使用
switch。
标签: javascript switch-statement logical-operators