【问题标题】:Problem with javascript switch statementjavascript switch 语句的问题
【发布时间】:2010-08-16 06:40:25
【问题描述】:
elmid = "R125"; switch(true){ case elmid.match(/R125/): idType = "reply"; break; } alert(idType); // Returns undefined -------------------BUT---------------------- elmid = "R125"; if (elmid.match(/R125/)){idType = "reply";} alert(idType); // Returns "reply"

使用 swtich 返回 undefined 但使用 if 返回预期值,是什么导致切换失败?为什么会这样?我在这里做错了什么?谁能解释为什么我得到不同的结果=)。

注意:没有建议在这种情况下使用 if 语句我知道,我的问题很简洁,因此在 switch 语句中不仅有 1 种情况。

【问题讨论】:

    标签: javascript switch-statement


    【解决方案1】:
    elmid.match(/R125/)
    

    这将返回实际的正则表达式匹配,不是真或假。

    当您编写 if 语句并使用 == 时,可以执行一些基本的类型转换,以使其按预期工作。 Switch 语句使用身份比较 (===),因此这不起作用。

    如果您想这样做,请改用 regex.test()(返回布尔值)。

    case /R125/.test(elmid):
    

    【讨论】:

    • 感谢您为我解决这个问题 =) ... 我只是在等待这个愚蠢的计时器说“您可以在 2 分钟内接受答案”:P
    【解决方案2】:

    .match 返回匹配 RegEx 的匹配项,而不仅仅是 truefalse
    switch 语句中,使用=== 比较测试值,而不是==
    所以结果表达式 ["R125"] === true 不正确,case 从未执行。

    【讨论】:

      【解决方案3】:

      match 函数返回一个数组或 null,因此它永远不会返回“true”。 但是您将 true 传递给 switch 语句,因此您能够检查的所有内容都是“true”。查看 match() 定义

      Match Definition

      但如果您使用 if 语句(使用 == 运算符而不是 === 运算符),则找到的数组在 if 语句中也将作为 true 有效。

      【讨论】:

        猜你喜欢
        • 2018-10-07
        • 2010-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多