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个案例。
答案 0 :(得分:10)
elmid.match(/R125/)
这将返回实际的正则表达式匹配,不是真还是假。
当您编写if语句并使用==
时,可以执行一些基本类型转换,以使其按预期工作。切换语句使用身份比较(===
),因此这不起作用。
如果你想这样做,请改用regex.test()(它返回一个布尔值)。
case /R125/.test(elmid):
答案 1 :(得分:0)
match函数返回一个数组或null,因此它永远不会返回“true”。 但是你将true传递给switch语句,所以你能够检查的是“true”。参见match()defintion
但是如果你使用的是if语句(使用==运算符而不是===运算符),那么找到的数组在if语句中也是有效的。
答案 2 :(得分:0)
.match
会返回与RegEx匹配的匹配项,而不仅仅是true
或false
。
在switch
语句中,使用===
比较测试值,而不是==
因此,结果表达式["R125"] === true
不正确,case
从未执行过。