Javascript或运算符不起作用

11
var strExt  = GetAttributeFromItemTable(itemTable, "Ext", "FileType");

我对 strExt 使用了 alert 函数,它能被解析出来。 如果 (strExt!='wav') { // 这个代码块能正常工作 }

if (strExt!='wav' || strExt!='mp3')
{
// this does not work.
}

在所有这些中,strExt的值是多少? - Anthony Corbelli
这应该建立在 strExt 真的不等于 'wav' 或 'mp3' 的假设下运行。 - Mike Lewis
6个回答

22

你的逻辑有问题:

如果你的变量strExt等于'wav',它就不等于'mp3',反之亦然。

请更清楚地解释你想要的结果。

我认为你想表达的是(既不是'wav'也不是'mp3'):

if ( !( strExt == 'wav' || strExt == 'mp3' ) )

这在逻辑上等同于(非'wav' 且 非'mp3'):

if ( strExt != 'wav' && strExt != 'mp3' ) )

尝试隐藏或不显示SP文档库中所有音频/视频文件的“下载副本”选项。 - Moni Nunu
谢谢zzzBov。第一行代码对我有用。再次感谢。 if ( !( strExt == 'wav' || strExt == 'mp3' ) ) - Moni Nunu

5

|| 表示:只要有一个条件为真,它就会返回 true,而不会查看后面的条件。

因此,true || false 是 true,false || true 也是 true。

在您的情况下,您说“如果 strExt 不等于 wav 并且不等于 mp3,则执行代码”。如果其中一个条件为 true,则执行该代码。

我想您可能正在寻找 && 符号。逻辑与 logical and 表示:“只有每个条件都为 true,它才会返回 true”——当它遇到 false 时,它就会返回 false。

我认为您的代码应该如下所示:

if (strExt!='wav' && strExt!='mp3')

非常好。感谢 Zirak 的贡献。 - Moni Nunu

1

我期望第二个表达式的结果是True,无论字符串strExt的值为何(任何扩展名都不等于“wav”或不等于“mp3”)。你期望什么?

你确定你不是想要一个布尔与运算而不是一个或运算(“扩展名既不是'wav'也不是'mp3'”)吗?


每当文件类型为音频或视频时,我会隐藏“下载副本”链接。(SharePoint开发) - Moni Nunu

1
只需添加另一个括号,像这样:

just add the another parenthesis, like so:

if ((strExt!='wav') || (strExt!='mp3'))
 {
     // this does not work.
 }

0

这背后的逻辑毫无意义,你难道不想这样做吗:

if ((strExt !== "wav") && strExt !== "mp3") {

}

在这种情况下,使用AND而不是OR更有意义。


0
如果您想进入第二个if,当strExt不等于'wav''mp3'时,您需要使用一个&&运算符。
if (strExt!='wav' || strExt!='mp3')

strExt='wav' => strExt!='wav' = false; strExt!='mp3' = true => false 或 true = true 并进入 if 语句,当 strExt='mp3' 时情况类似。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接