最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Problem with javascript switch statement - Stack Overflow

programmeradmin1浏览0评论

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"


Using the swtich returns undefined but using an if returns the expected value, what is causeing the switch to fail ? Why is this the case? what am i doing wrong here? can any one explain why I get different results =).

NOTE: No advices to use an if statement in this case I know that, my question concise for asking there hence there is not only 1 case in the 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"


Using the swtich returns undefined but using an if returns the expected value, what is causeing the switch to fail ? Why is this the case? what am i doing wrong here? can any one explain why I get different results =).

NOTE: No advices to use an if statement in this case I know that, my question concise for asking there hence there is not only 1 case in the switch statement.

Share Improve this question asked Aug 16, 2010 at 6:40 Abdullah KhanAbdullah Khan 2,4253 gold badges23 silver badges34 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 11
elmid.match(/R125/)

This returns the actual regex matches, not true or false.

When you're writing an if statement and using ==, some basic type conversion can be performed so that it works as expected. Switch statements use the identity parison (===), and so this won't work.

If you want to do it this way, use regex.test() (which returns a boolean) instead.

case /R125/.test(elmid):

.match returns the matches that matched the RegEx, not just true or false.
In a switch statement, the test values are pared using ===, not ==.
So the resulting expression ["R125"] === true is not true and the case never executed.

The match function returns an array or null, so it will never return "true". But you are passing true into the switch statement, so all you are able to check against is "true". See the match() defintion

Match Definition

But if you are using an if statement (with the == operator instead the === operator), also the found array will be valid as true in the if statement.

发布评论

评论列表(0)

  1. 暂无评论