Javascript Typescript开关语句执行错误的大小写?
如果有,则执行第一种情况,即使筛选器为false(如下所示为日志语句): 这是控制台记录的内容(可以在stackblitz链接中看到):Javascript Typescript开关语句执行错误的大小写?,javascript,angular,typescript,Javascript,Angular,Typescript,如果有,则执行第一种情况,即使筛选器为false(如下所示为日志语句): 这是控制台记录的内容(可以在stackblitz链接中看到): 我有一种感觉,我错过了一些非常简单的东西,但同时这似乎是错误的。。。想法?这不是你写开关盒的方式。整个想法是打开一个动态值,然后让每个案例处理一个静态值 switch (filter) { case true: console.log("Returning complete TODOS"); return completeTodos;
我有一种感觉,我错过了一些非常简单的东西,但同时这似乎是错误的。。。想法?这不是你写开关盒的方式。整个想法是打开一个动态值,然后让每个案例处理一个静态值
switch (filter) {
case true:
console.log("Returning complete TODOS");
return completeTodos;
case false:
console.log("Returning incomplete TODOS");
return incompleteTodos;
default:
console.log("Returning the Default");
return completeTodos;
}
break
语句也是多余的,因为您在它们前面返回。如果要在开关块之后继续执行,则只需break
此外,您的默认情况也有点无意义,因为bool要么为真,要么为假,除非您计划在某些情况下传递
未定义的。开关的思想是使用开关(someValue)
中的值,并在每个情况下检查它,但您正在手动执行每个情况检查
如果希望保持这种状态,请在开关(true)
const filter=false;
开关(真){
案例过滤器==真:
日志(“返回完整的TODO”);
打破
案例过滤器==假:
log(“返回不完整的TODO”);
打破
违约:
log(“返回默认值”);
}
开关盒的工作原理:
这就是它的工作原理:
开关表达式计算一次。
将表达式的值与每种情况的值进行比较。
如果存在匹配项,则执行关联的代码块
您的案例filter==true正在返回false
按如下方式更改代码:
public applyFilter(filter, completeTodos, incompleteTodos): Todo[] {
console.log("FILTER VALUE: ", filter);
console.log("IS THE FILTER TRUE?", filter == true);
switch (filter) {
case true:
console.log("Returning complete TODOS");
return completeTodos;
break;
case false:
console.log("Returning incomplete TODOS");
return incompleteTodos;
break;
default:
console.log("Returning the Default");
return completeTodos;
}
}
尝试case-true:
和case-false:
filter
为false,因此它将转到第一个案例
,该案例的计算结果为false
,即filter==true
@DavidAnthonyAcosta我支持你。“boolean的switch语句”在其他情况下被称为“if语句”break
是不需要的。是的,我也会删除break。只是从问题中复制了代码。事实上-我在更复杂的设置上遇到了问题,所以我试图将其归结到最低限度。。。真正的用例将使用一个枚举并检查过滤器是否是一个枚举值。@Ole然后使用bog标准方式切换枚举开关(someVar)
,然后使用案例值\u ONE
,案例值\u TWO
,案例值\u TWO
等。
switch (filter) {
case true:
console.log("Returning complete TODOS");
return completeTodos;
case false:
console.log("Returning incomplete TODOS");
return incompleteTodos;
default:
console.log("Returning the Default");
return completeTodos;
}
public applyFilter(filter, completeTodos, incompleteTodos): Todo[] {
console.log("FILTER VALUE: ", filter);
console.log("IS THE FILTER TRUE?", filter == true);
switch (filter) {
case true:
console.log("Returning complete TODOS");
return completeTodos;
break;
case false:
console.log("Returning incomplete TODOS");
return incompleteTodos;
break;
default:
console.log("Returning the Default");
return completeTodos;
}
}