如果具有Stackblitz: the following typescript switch block并且执行第一种情况,即使过滤器为假(如下面的记录语句所示):
public applyFilter(filter, completeTodos, incompleteTodos): Todo[] {
console.log("FILTER VALUE: ", filter);
console.log("IS THE FILTER TRUE?", filter == true);
switch (filter) {
case filter == true:
console.log("Returning complete TODOS");
return completeTodos;
break;
case filter == false:
console.log("Returning incomplete TODOS");
return incompleteTodos;
break;
default:
console.log("Returning the Default");
return completeTodos;
}
}
这是控制台日志(可以在stackblitz链接中看到):
FILTER VALUE:
false
IS THE FILTER TRUE?
false
Returning complete TODOS
我感觉自己缺少了一些非常简单的东西,但与此同时,这似乎是错误的……想法?
答案 0 :(得分:4)
这不是您编写开关盒的方式。整个想法是打开一个动态值,然后让每种情况处理一个静态值。
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
。
此外,由于布尔值是对还是错,因此您的默认情况是没有根据的,除非您打算在某些情况下通过undefined
。
答案 1 :(得分:1)
切换的想法是使用switch(someValue)
中的值并在每种情况下进行检查,但是您需要手动进行每种情况检查。
如果您希望保留这种方式,请在switch(true)
const filter = false;
switch (true) {
case filter == true:
console.log("Returning complete TODOS");
break;
case filter == false:
console.log("Returning incomplete TODOS");
break;
default:
console.log("Returning the Default");
}
否则,请像这样使用switch语句:
const filter = false;
switch (filter) {
case true:
console.log("Returning complete TODOS");
break;
case false:
console.log("Returning incomplete TODOS");
break;
default:
console.log("Returning the Default");
}
答案 2 :(得分:0)
Refer开关盒的工作原理:
它是这样工作的:
switch表达式只计算一次。 将表达式的值与每种情况的值进行比较。 如果匹配,则执行相关的代码块。
您的案例 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;
}
}