if(xxx || xxx),我做错了什么?

时间:2013-04-09 20:34:20

标签: javascript if-statement

有人可以向我解释我做错了什么吗?

function navMenuIntervalCheck() {
    if (currentSiteUrl != "subsites/players.php" || currentSiteUrl != "subsites/itemshop.php") {
        $.ajax({
            url: currentSiteUrl,
            cache: false,
            success: function (dataForContainer) {
                $('#container').html(dataForContainer);
            }
        });
    }

    screenControlCheck();
};

setInterval(function () {
    navMenuIntervalCheck()
}, 5000);

当我运行我的网站时,即使currentSiteUrl==subsites/players.php

,它也会刷新

6 个答案:

答案 0 :(得分:10)

由于x!='a' || x!='b'始终为true,我猜你想要&&而不是||

||改为OR,将&&改为AND

the MDN on logical operators中的更多详情。

答案 1 :(得分:3)

currentSiteUrl只能有一个值,因此,您测试的至少一个值不会等于currentSiteUrl,这使得if条件始终为{{} 1}}。

我认为您打算使用true,或者您打算&&==一起使用。

答案 2 :(得分:2)

您的代码说明了这一点:

当currentSiteUrl与subsites / players.php不同或不同于subsites / itemshop.php时刷新。

所以subsites / players.php确实不同于subsites / itemshop.php

使用&&而不是||

答案 3 :(得分:2)

看看你的if语句:

if (a != foo || a != bar)

让我们看看可能性:

  • a = foo。这将评估为真,因为!= bar
  • a =吧。这将评估为真,因为!= foo
  • a =其他任何东西。这将评估为真,因为!= foo

您的if语句始终评估为true。

正如其他人已经说过的那样,您希望将||替换为&&

让我向你提出一个逻辑规则,称为DeMorgan's Law。在学习如何设置好if语句时,这非常有用。

!(a || b) === !a && !b

!(a && b) === !a || !b

这说的是:“不是(一个或另一个事件)”与“不是一个事件而不是另一个事件”是相同的,而“不是(一个事件和另一个事件)”与“不是一个事件”是一回事或不是另一个“。

答案 4 :(得分:2)

我知道这已得到解答,但认为使用您自己的代码添加一些其他信息可能会有所帮助。

如上所述,将logical operator||切换为&&将会有效:

if (currentSiteUrl != "subsites/players.php" && currentSiteUrl != "subsites/itemshop.php")

但为什么会这样?


使用||


||逻辑运算符如果第一个或第二个表达式为true则返回true,并且仅当两者都为false时才会返回false。< / p>

因此:

  • 如果currentSiteUrl != "subsites/players.php"true,您最终会进入if区块

  • 如果currentSiteUrl != "subsites/players.php"falsecurrentSiteUrl != "subsites/itemshop.php"true,则您最终会进入if区块

永远不会有另一种情况,因为您的变量currentSiteUrl只能包含一个值,因此其中一个表达式始终为true,导致您始终以{{1}结尾阻止。


使用if


另一方面,使用&&逻辑运算符,如果第一个或第二个表达式为&&,则返回false,并且仅当两者都为false时才返回true {1}}。

因此:

  • 如果truecurrentSiteUrl != "subsites/players.php"truecurrentSiteUrl != "subsites/itemshop.php",则您最终会进入true区块

  • 如果ifcurrentSiteUrl != "subsites/players.php"truecurrentSiteUrl != "subsites/itemshop.php",则会以false结尾块

  • 如果ifcurrentSiteUrl != "subsites/players.php",您 <{>}

永远不会有另一个场景,因为只有当两个表达式都是false时,你才能进入if块,并且只要表达式为true,你就不会。< / p>

答案 5 :(得分:0)

你是如何获得currentSiteUrl的?一个url后面是protocol :: // domain

尝试使用follwoing属性获取URL然后匹配

window.location.href

此网址还将包含http或https和域名