javascript - 如何在 switch Javascript 中使用类型转换比较而不是严格比较?

标签 javascript switch-statement

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/

相关文章:

ios - 如何使用 UILongPressGestureRecognizer 计算长按按钮的时间

javascript - javascript中的谷歌地图标记循环

javascript - 使用单击处理程序更改函数内部的全局范围变量

javascript - 从 Angular js中的另一个 Controller 调用另一个函数

javascript - Three.js 将对象补间到相机前面

coldfusion - 使用 Coldfusion cfswitch 标签失败?

javascript - 如何使用 javascript 检测在 PDF 中标记图像的位置

c - 程序拼出整数数字 : (in switch statement) does not match case values, 为什么?

java - SwipeRefreshLayout 阻止 android.widget.switch 拖动

c++ - 切换枚举时在 switch 语句中使用默认值