var strExt = GetAttributeFromItemTable(itemTable, "Ext", "FileType");
我对strExt发出警报并解析。 if(strExt!='wav') { //这个有效 }
if (strExt!='wav' || strExt!='mp3')
{
// this does not work.
}
答案 0 :(得分:12)
你的逻辑存在缺陷:
如果您的变量strExt
等于'wav'
,则 等于'mp3'
,反之亦然。
请更清楚地解释您想要的结果。
我认为你想说的是('wav'
和 'mp3'
):
if ( !( strExt == 'wav' || strExt == 'mp3' ) )
在逻辑上等同于(不是'wav'
而不是 'mp3'
):
if ( strExt != 'wav' && strExt != 'mp3' ) )
答案 1 :(得分:1)
我希望第二个表达式的结果为True
而不管字符串strExt
的值(任何扩展名不等于“wav”或不等于“mp3”) 。你能指望什么?
你确定你不是指一个布尔AND而不是一个OR(“扩展既不是'wav'也不是'mp3'”)?
答案 2 :(得分:1)
||说:如果任何条件成立,我会返回true,而不会看到之后的那些。
所以true || false
为真,falls || true
为真。
在你的情况下,你说“如果strExt不等于wav并且不等于mp3,则执行”。如果其中一个为真,则执行。
我在想你正在寻找&&符号。 logical and
说“只有当每个条件都为真时我才会返回true” - 当它遇到假时,它会返回false。
我认为您的代码应该是这样的:
if (strExt!='wav' && strExt!='mp3')
答案 3 :(得分:0)
这背后的逻辑没有任何意义,你不想这样做:
if ((strExt !== "wav") && strExt !== "mp3") {
}
在这种情况下,而不是OR更有意义。
答案 4 :(得分:0)
如果您想进入第二个if
,当strExt
不等于'wav'
和'mp3'
时,您需要使用&&
运算符。
if (strExt!='wav' || strExt!='mp3')
strExt='wav'
=> strExt!='wav'
= false; strExt!='mp3'
= true => false或true = true并进入if
语句,strExt='mp3'
时的情况类似。
答案 5 :(得分:0)
只需添加另一个括号,如下所示:
if ((strExt!='wav') || (strExt!='mp3'))
{
// this does not work.
}