我“想”使用开关,但是当我以这种方式使用它时,我似乎无法使它工作。谁知道为什么?
var mystring='my name is johnny';
switch (!-1) {
case mystring.indexOf('hello'):
alert('hello');
break;
case mystring.indexOf('goodbye'):
alert('goodbye');
break;
case mystring.indexOf('johnny'):
alert('johnny');
break;
default:
alert('default');
}
它总是提醒“默认”,但你可以看到我希望它提醒“johnny”
答案 0 :(得分:8)
免责声明:此开关是 evil 。使用if / else-if语句。但如果你必须使用开关,可以这样做:
switch (true) {
case /hello/.test(mystring):
alert('hello');
break;
case /goodbye/.test(mystring):
alert('goodbye');
break;
case /johnny/.test(mystring):
alert('johnny');
break;
default:
alert('default');
}
应该按照您的意愿工作。
我很想进一步重构它。
function Parse(str) {
var logic = {
"hello": function(str) { alert("hello"); }
/*, ... */
}
for (var k in logic) {
if ((new RegExp(k)).test(str)) {
logic[k](str);
}
}
}
Parse("Hello I am johnny");
答案 1 :(得分:5)
!-1
将-1
强制转换为布尔值,然后将其否定,所以
switch(!-1)
{
// stuff
}
相当于
switch(false)
{
// stuff
}
由于没有case false
,因此始终会执行default
。这真的不是使用开关的正确方法 - switch
在常量表达式中没有任何意义。
为什么“想要”使用switch
?
以下是如何正确实现它:
var mystring='my name is johnny';
if (mystring.indexOf('hello') !== -1) alert('hello');
else if (mystring.indexOf('goodbye') !== -1) alert('goodbye');
else if (mystring.indexOf('johnny') !== -1) alert('johnny');
或者,减少重复性,
var mystring='my name is johnny',
words = ['hello', 'goodbye', 'johnny'],
word;
while (word = words.shift(), mystring.indexOf(word) === -1);
word = word || 'default';
alert(word);
答案 2 :(得分:3)
“not”(!
)和“-1
”的组合似乎有问题。您需要将它们移动到您的案例中
var mystring='my name is johnny';
switch (true) {
case mystring.indexOf('hello') != -1:
alert('hello');
break;
case mystring.indexOf('goodbye') != -1:
alert('goodbye');
break;
case mystring.indexOf('johnny') != -1:
alert('johnny');
break;
default:
alert('default');
}
PHP很痛苦,strpos(...)
在找不到false
时返回0
,当字符串从它开始时==
(这两个值是===
,但不是{{} 1}})但我个人觉得JavaScripts indexOf(..) == -1
更糟糕。 (为什么不能false
或null
?)
答案 3 :(得分:0)
这里发生的是switch
!-1
的{{1}}结果,case
找不到switch-case
。 {{1}}似乎不是在这里使用的正确结构。
答案 4 :(得分:0)
表达式!-1
只评估为false
。
您正尝试将x != -1
之类的比较转换为x == !-1
,但!
运算符不会否定比较,只会取消值。
答案 5 :(得分:0)
我认为你的实施是正确的。要使用的正确条件语句是 if ...... else 。
var mystring ='我的名字是johnny&#39 ;;
if(mystring.indexOf(' hello')!= -1) 警报('你好');
否则if(mystring.indexOf('再见')!= -1)警报('再见');
否则if(mystring.indexOf(' johnny')!= -1)警报(' johnny');
否则提醒('默认');
答案 6 :(得分:-2)
开关应该是mystring,例如: