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