var strExt = GetAttributeFromItemTable(itemTable, "Ext", "FileType");
我对 strExt 使用了 alert 函数,它能被解析出来。 如果 (strExt!='wav') { // 这个代码块能正常工作 }
if (strExt!='wav' || strExt!='mp3')
{
// this does not work.
}
var strExt = GetAttributeFromItemTable(itemTable, "Ext", "FileType");
我对 strExt 使用了 alert 函数,它能被解析出来。 如果 (strExt!='wav') { // 这个代码块能正常工作 }
if (strExt!='wav' || strExt!='mp3')
{
// this does not work.
}
你的逻辑有问题:
如果你的变量strExt
等于'wav'
,它就不等于'mp3'
,反之亦然。
请更清楚地解释你想要的结果。
我认为你想表达的是(既不是'wav'
也不是'mp3'
):
if ( !( strExt == 'wav' || strExt == 'mp3' ) )
这在逻辑上等同于(非'wav'
且 非'mp3'
):
if ( strExt != 'wav' && strExt != 'mp3' ) )
||
表示:只要有一个条件为真,它就会返回 true,而不会查看后面的条件。
因此,true || false
是 true,false || true
也是 true。
在您的情况下,您说“如果 strExt 不等于 wav 并且不等于 mp3,则执行代码”。如果其中一个条件为 true,则执行该代码。
我想您可能正在寻找 &&
符号。逻辑与 logical and
表示:“只有每个条件都为 true,它才会返回 true”——当它遇到 false 时,它就会返回 false。
我认为您的代码应该如下所示:
if (strExt!='wav' && strExt!='mp3')
我期望第二个表达式的结果是True
,无论字符串strExt
的值为何(任何扩展名都不等于“wav”或不等于“mp3”)。你期望什么?
你确定你不是想要一个布尔与运算而不是一个或运算(“扩展名既不是'wav'也不是'mp3'”)吗?
just add the another parenthesis, like so:
if ((strExt!='wav') || (strExt!='mp3'))
{
// this does not work.
}
这背后的逻辑毫无意义,你难道不想这样做吗:
if ((strExt !== "wav") && strExt !== "mp3") {
}
在这种情况下,使用AND而不是OR更有意义。
if
,当strExt
不等于'wav'
和'mp3'
时,您需要使用一个&&
运算符。if (strExt!='wav' || strExt!='mp3')
strExt='wav'
=> strExt!='wav'
= false; strExt!='mp3'
= true => false 或 true = true 并进入 if
语句,当 strExt='mp3'
时情况类似。