我目前正致力于项目,我不了解的部分代码。其中一个你可以在下面看到(用JS编写):
switch (true) {
case parseInt(data):
return 'data';
case parseInt(row):
return 'row';
default:
return 'default';
}
我创建了JSFiddle来测试这个switch(true)语句并查看它的行为方式。它始终返回'默认'串。有人可以向我解释那里发生了什么吗? JSFiddle switch test
答案 0 :(得分:4)
JavaScript中的切换只是比较case
的值是否与===
(在这种情况下为switch
内)严格相等(true
)。这通常用于比较字符串,但布尔值也可以使用,尽管它不太常见。请看以下示例:
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
(如果无法解析输入)。虽然数字可以是真实的,但它绝不会严格true
。这就是为什么你的函数总是返回'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';
答案 1 :(得分:0)
它会执行评估为case
的第一个true
。如果case
不是true
,则会执行default
块
例如:
switch (true) {
case 1 === 1:
console.log('ok1');
break;
case 2 === 2:
console.log('ok2');
break;
default:
console.log('not ok');
}

console.log('ok1')