0
if(stringName.charAt(0) != 'Q' || stringName.charAt(0) != 'W' || stringName.charAt(0) != 'E'){

        SetID = "Yes";

    }

上面的代码当我使用 alert 弹出窗口时 My.String.charAt(0) 的值返回正确的值,但我不知道为什么它进入 if 语句并将 SetID 的值更改为Yes

我试图弄清楚它有什么问题,但真的什么都看不到

SetID初始化为No

4

3 回答 3

10

您正在使用||,但您可能的意思是&&...

现在的样子,永远都是true。“如果字符不是'Q',或者不是'W',或者不是'E',那么……”——即使它是这些字符之一,也不会是其他字符,所以表达式计算到true.

于 2012-04-06T13:47:14.197 回答
1

让我们分解你的陈述。

MyString.charAt(0) != 'Q'

好的,所以如果不是 Q 则继续。

||

所以如果角色Q,继续沿着链。

MyString.charAt(0) != 'W'

至此,我们已经确定字符不是 Q(在这种情况下SetID = "Yes"运行),或者它是 Q。但如果它是 Q,那么显然它不是 W,因此下一个条件为真并且SetID = "Yes"运行.

你看?不管角色是什么,它都能通过测试。

我想你的意思是使用&&,不是||。如果使用&&,则SetID = "Yes"仅当字符不是 Q、W 或 E 时才会运行。

于 2012-04-06T13:49:59.980 回答
1

不是一个答案[太多的评论代码],而是另一种使用 reg exp 的可能解决方案

var stringName = "Quick";
if( (/^[QWE]/).test(stringName) ){
   SetID = "Yes";
}
于 2012-04-06T13:53:42.227 回答