Javascript 在JS中,这个开关是如何工作的?什么是开关(真)?

Javascript 在JS中,这个开关是如何工作的?什么是开关(真)?,javascript,switch-statement,Javascript,Switch Statement,我目前正在从事这个项目,其中有一些代码是我不理解的。您可以在下面看到其中一个(用JS编写): 我创建了JSFIDLE来测试这个switch(true)语句,并查看它的行为。它总是返回“default”字符串。有人能给我解释一下那里发生了什么事吗? 如果大小写的值与开关内部的值严格相等(==),JavaScript中的开关只需进行比较(在本例中为true)。这通常用于比较字符串,但布尔值也可以,尽管它不太常见。以以下为例: switch (true) { case 1 + 1 === 3:

我目前正在从事这个项目,其中有一些代码是我不理解的。您可以在下面看到其中一个(用JS编写):

我创建了JSFIDLE来测试这个switch(true)语句,并查看它的行为。它总是返回“default”字符串。有人能给我解释一下那里发生了什么事吗?

如果
大小写的值与
开关内部的值严格相等(
==
),JavaScript中的开关只需进行比较(在本例中为
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
(以防无法解析输入)。虽然一个数字可能是真实的,但它永远不会严格地
真实
。这就是为什么函数总是返回
“默认值”
。同样,我不知道您的目标是什么,但您可能希望检查该值是否为truthy,而不是
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';

它将执行计算结果为
true
的第一个
案例。如果no
case
true
,则它将执行
默认

例如:

开关(真){
案例1==1:
console.log('ok1');
打破
案例2==2:
console.log('ok2');
打破
违约:
console.log('notok');

}
它将案例与开关进行比较:
true
是否等于
parseInt(数据)
switch
进行身份检查,即使用
==
进行检查。很好的解释@Duncan Luk.。在您的案例OP中,switch语句正在查找
parseInt(数据)
parseInt(行)
返回true。否则将调用默认情况。顺便说一句,这不太好,因为“parseInt()函数解析字符串并返回整数。”parseInt()不返回布尔值。那么,我的示例中的代码是否可能没有工作的机会?@ptyskju我更新了我的答案,解释了为什么您的代码不工作。我希望它能解决你的问题。
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';