我目前正在做一个项目,其中有一些我不明白的代码。您可以在下面看到其中之一(用 JS 编写):
switch (true) {
case parseInt(data):
return 'data';
case parseInt(row):
return 'row';
default:
return 'default';
}
我创建了 JSFiddle 来测试这个 switch(true) 语句并查看它的行为方式。它始终返回“默认”字符串。有人可以向我解释一下那里发生了什么吗?
JSFiddle switch test
最佳答案
JavaScript 中的 switch 只是比较 case
的值是否严格等于 (===
) 与 switch
内的值 (在本例中为true
)。这通常用于比较字符串,但 bool 值也可以工作,尽管不太常见。举个例子:
switch (true) {
case 1 + 1 === 3:
return 'A';
case 2 * 2 === 4:
return 'B';
default:
return 'C';
}
此代码将返回 'B'
,因为它是第一个匹配 true
的情况。如果没有任何情况与 true
匹配,它将返回 'C'
。
关于您的具体场景;我建议将您的代码重写为以下内容:
if (parseInt(data) === true) {
return 'data';
}
if (parseInt(row) === true) {
return 'row';
}
return 'default';
此代码执行的操作与您的完全相同,但读者可以立即清楚发生了什么。
我不确定您使用此功能的目标是什么,因此我无法推荐解决您问题的最佳方法。不过,我可以向您解释为什么它可能不起作用。
parseInt
函数将始终返回一个数字或 NaN
(以防输入无法解析)。尽管数字可能是真实的,但它永远不会是严格的真实
。这就是为什么你的函数总是返回'default'
。再说一遍,我不知道您的目标是什么,但您可能想检查该值是否为真,而不是true
:
if (parseInt(data)) {
// Data can be parsed to a number and is not 0
return 'data';
}
if (parseInt(row)) {
// Row can be parsed to a number and is not 0
return 'row';
}
return 'default';
关于javascript - switch case 在 JS 中是如何工作的? switch(true) 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49758851/