2012-04-06 82 views
0
if(stringName.charAt(0) != 'Q' || stringName.charAt(0) != 'W' || stringName.charAt(0) != 'E'){ 

     SetID = "Yes"; 

    } 

上面的代码当我使用alert来弹出窗口时,My.String.charAt(0)的值正在返回正确的值,但我不知道它为什么会进入if语句并更改SETID到YesJavaScript中这个if语句逻辑有什么问题?

我试图弄清楚什么是错的,真的什么都看不到

SetID是初始化为No

+1

nipick:你真的应该将'stringName.charAt(0)'存储在一个变量中,并且使用它来代替查找多次。 – epascarello 2012-04-06 13:50:57

+0

@epascarello是的,我确实将它存储在我的真实代码中:D – Ali 2012-04-06 13:51:26

回答

10

您使用||但你可能意味着&&。 ..

它现在的样子,它永远是true。 “如果角色不是'Q',或者不是'W',或者不是'E',那么......”—即使它是其中一个角色,它也不会是其他角色,所以表达式评估到true

+0

OMG多么愚蠢我真的应该再次想到这个逻辑。 – Ali 2012-04-06 13:49:50

1

让我们来分解你的陈述。

MyString.charAt(0) != 'Q' 

好的,所以如果不是Q,那么它会继续。

|| 

因此,如果字符 Q,沿链继续。

MyString.charAt(0) != 'W' 

通过这一点,我们已经建立了两种字符不是Q(在这种情况下SetID = "Yes"运行),或者是为Q.但是,如果它是Q,那么显然它不是W,因此接下来的条件是成立的,运行SetID = "Yes"

你看?无论角色是什么,它都通过了测试。

我想你的意思是使用&&而不是||。如果你使用&&,那么SetID = "Yes"仅如果字符为Q,W或E.

+0

谢谢非常好的解释! – Ali 2012-04-06 13:50:54

1

不是一个答案[注释行的代码太多]没有跑,而是用一个reg EXP

另一种可能的解决方案
var stringName = "Quick"; 
if((/^[QWE]/).test(stringName)){ 
    SetID = "Yes"; 
}