javascript switch语句出问题

时间:2010-08-16 06:40:25

标签: javascript switch-statement


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个案例。

3 个答案:

答案 0 :(得分:10)

elmid.match(/R125/)

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

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

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

case /R125/.test(elmid):

答案 1 :(得分:0)

match函数返回一个数组或null,因此它永远不会返回“true”。 但是你将true传递给switch语句,所以你能够检查的是“true”。参见match()defintion

Match Definition

但是如果你使用的是if语句(使用==运算符而不是===运算符),那么找到的数组在if语句中也是有效的。

答案 2 :(得分:0)

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