2011-03-17 94 views
5
var strExt = GetAttributeFromItemTable(itemTable, "Ext", "FileType"); 

我为strExt做了一个提示并解决。 如果(strExt!=“的wav”) { //这工作 }Javascript or operator not working

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

什么是strExt在这一切的价值呢? – 2011-03-17 21:06:15

+0

什么不起作用? – 2011-03-17 21:08:50

+0

这应该在strExt真的不等于'wav'或'mp3'的假设下工作。 – 2011-03-17 21:08:53

回答

10

你的逻辑是有缺陷的:

如果您的变量strExt等于'wav'等于'mp3',反之亦然和签证。

请更清楚地解释您所需的结果。

我想你想说的是一样的东西(无论'wav'也不'mp3'):

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

这在逻辑上等同于(不'wav'而不是'mp3'):

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

试图隐藏或不显示SP中文档库中所有音频/视频文件的“下载副本”。 – 2011-03-17 21:13:06

+0

谢谢zzzBov。第一行代码适用于我。再次感谢 if(!(strExt =='wav'|| strExt =='mp3')) – 2011-03-17 21:20:39

1

我期望第二表达式的结果是True不管串strExt的值(任意扩展是不等于“wav”或不等于“mp3”)。你能指望什么?

你确定你不是指布尔AND而不是OR(“扩展既不是'wav'也不是'mp3'”)?

+0

只要文件类型是音频或视频,我就隐藏了“下载副本”链接。 (共享点开发)。 – 2011-03-17 21:10:16

+0

是的。请阅读我的评论。你想要一个布尔AND。 – chryss 2011-03-17 21:11:16

+0

太好了。感谢您的输入。 – 2011-03-17 21:29:23

0

这背后的逻辑是没有意义的,你不想这样做:

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

} 

而不是OR在这种情况下更有意义。

+0

太好了。感谢您的输入。 – 2011-03-17 21:30:24

0

如果你想进入第二if,当strExt不等于两个'wav''mp3'您需要使用&&操作。

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

strExt='wav' =>strExt!='wav' = FALSE; strExt!='mp3' = true => false或true = true并进入if声明,并且在strExt='mp3'时情况类似。

+0

太好了。感谢您的输入。 – 2011-03-17 21:31:04

1

||说:如果任何条件是真的,我会回到真实的,而不看后面的那些。因此true || false为真,falls || true为真。

在你的情况下,你会说“如果strExt不等于wav并且不等于mp3,则执行”。如果其中一个是真的,它会执行。

我在想,你正在寻找& &符号。 logical and说“只有当每个条件都是真的时候我才会返回true” - 当它发生错误时,它返回false。

我觉得你的代码应该是这样的:

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

太好了。谢谢Zirak的输入。 – 2011-03-17 21:30:02