2012-04-06 87 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"; 
}