我有以下开关块:
var str = 'matches[pw1]';
switch (str)
{
case (str.indexOf('matches') > -1) :
console.log('yes');
break;
default:
console.log(str.indexOf('matches') ) ;
console.log('no');
break;
}
我想要的是,如果str
包含单词'matches',那么它应该运行第一个case块,否则运行默认块。
然而,当我运行它时,我得到的输出是'0',然后'不',这意味着默认块正在运行,尽管满足第一种情况的条件。
任何想法有什么不对?
答案 0 :(得分:3)
您的case
可能正在测试(str.indexOf('matches') > -1) == str
。
编辑:
准确理解switch
和case
的含义可能很有用。 Javascript的一个祖先,C,常用switch
来替换原语与值列表(通常来自enum
或一系列文字)进行比较的代码块。所以而不是:
if (type == ENABLE_FRAMISTAN)
{
enable_framistan();
}
else if (type == ENABLE_FROBSOSTICATOR)
{
enable_frobnosticator();
}
else if (type == DISABLE_BAZTICULATOR)
{
disable_bazticulator();
}
else
{
assert(false);
}
你可以写一下:
switch (type)
{
case ENABLE_FRAMISTAN: enable_framistan(); break;
case ENABLE_FROBNOSTICATOR: enable_frobnosticator(); break;
case DISABLE_BAZTICULATOR: disable_bazticulator(); break;
default: assert(false); break;
}
...这可能使得更容易消化(和或发现错误)大块代码,这些代码有效地将type
值映射到被调用的函数(或某些此类函数)。您指定的用法,检查字符串是否与任何潜在的(彼此独占?)模式匹配,也不会映射到switch
。如果它只是被测试的平等,它会运作良好,但你的条件比switch
设计用来表达更复杂。您设法使用功能集保存switch
的任何方式都为likely require less-than-obvious code。
答案 1 :(得分:2)
为什么不使用if语句?尝试这样的事情:
var str = 'matches[pw1]';
if(str.indexOf('matches') > -1) {
console.log('yes');
break;
}else{
console.log(str.indexOf('matches') ) ;
console.log('no');
break;
}
它应该有用,因为你还没有很多案例。我认为你不能在案件中进行比较。
答案 2 :(得分:1)
我想要的是,如果str包含单词'matches',那么它应该运行第一个case块,否则运行默认块。
使用switch语句不能这样做。 switch语句将评估switch表达式(在本例中为str
)的结果与case标签的值进行比较。案例标签可以是表达式(如示例所示),但如果是,则表达式将被评估,然后使用===
与上面的值进行比较。 (这就是ECMAScript 5.1规范所说的......)
那么你的代码实际上正在为这种情况做的是(粗略地说):
(str.indexOf('matches') > -1)
,为您提供true
或false
true
或false
与str
的值进行比较...失败并且案件正文未执行。现在我想你可以让你的方法如下工作:
case (str.indexOf('matches') > -1 ? str : '') :
console.log('yes');
break;
但从代码可读性角度(IMO)发臭。
答案 3 :(得分:0)
你可以这样做:
console.log( str.indexOf( 'matches' ) > -1 ? 'yes' : 'no' );
答案 4 :(得分:0)
您应该知道交换机的基本用法。我认为你误用了Switch。尝试使用如下:
var str = 'matches[pw1]';
str = str.indexOf('matches');
switch (str)
{
case -1 :
console.log('yes');
break;
default:
console.log(str.indexOf('matches') ) ;
console.log('no');
break;
}
请查看以下网址http://www.w3schools.com/js/js_switch.asp
如果上述内容不适合您的逻辑,请使用if .. else if ... http://www.w3schools.com/js/js_if_else.asp