Javascript 有没有办法在 switch 语句中使用非严格比较?
示例:
if (item == '3') { ... }
else if (item == 'Chocolate') { ... }
else { ... }
在开关中:
switch (item){
case '3':
... break;
case 'Chocolate':
... break;
default:
...
}
我想测试在一种情况下item是否等于3(数字)或'3'(字符)。我想避免为相同的指令编写两个案例。
可能吗?
最佳答案
switch(item.toString()){
case "3" :
[...]
将按照您的意愿行事。虽然有点老套,但确实有效。
正如下面的评论所示,对此有很多警告。如果您确定该项始终是字符串或数字,它将完全按照预期工作。
bool 值将是“true”
或“false”
,因此不属于“0”和“1”情况。
对象,除非您更改了它们的 toString 方法,否则将陷入 “[object Object]”
情况。
一个元素的数组将“toString”为其唯一元素的大小写相同。
我会重申,使用失败可能会更安全。
话虽如此......让我们进入古怪的领域
我尝试覆盖 Object.prototype.valueOf,如 fake-operator-overloading 中所示。 。然而,switch 语句不会调用 valueOf,因此这是不可能的。现在,如果您真的想要 switch
语义和 ==
,您可以这样做:
switch(true){
case key == 1 :
//...
break;
case key == "something" :
//...
break;
case key == false :
//...
break;
default :
}
this method taken from mozilla doc
现在,对我来说,这似乎非常复杂,而且没有太多好处。但在这里你有它。我什至不确定 {}
或 NaN
等某些值会属于什么情况,但例如 ""
和 0
将进入 false
,前提是之前没有任何内容捕获它们
关于javascript - 如何在 switch Javascript 中使用类型转换比较而不是严格比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44460824/