2013-04-09 39 views
3

有人可以向我解釋我做錯了什麼?if(xxx || xxx),我做錯了什麼?

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

+0

你在哪裏指定'currentSiteUrl'? – Bart 2013-04-09 20:36:13

+1

&& vs || ?,第二個條件匹配 – David 2013-04-09 20:36:42

回答

10

由於x!='a' || x!='b'總是true,我想你想&&而不是||

閱讀||作爲OR&&作爲AND

更多詳細信息請參見the MDN on logical operators

+0

我通過&&的方式,所以currentSiteUrl將必須具有兩個值:/ – 2013-04-09 20:37:53

+0

它的工作原理!謝謝 – 2013-04-09 20:38:57

3

currentSiteUrl只能有一個值,所以它永遠是值的至少一個你測試將不等於currentSiteUrl,使得if條件總是true

我想你的意思是使用&&或者你打算用||來做==

2

你的代碼,這樣說:

刷新時currentSiteUrl比子網站/ players.php不同或不同於子網站/ itemshop.php。

所以子網站/ players.php比子網站確實不同/ itemshop.php

使用& &代替||

2

看看你的if語句:

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

讓我們看一下這些可能性:

  • A = foo中。這將被評估爲真實的,因爲a = bar
  • a = bar。這將評估爲真,因爲a =其他任何東西。這將評估爲真,因爲a!= foo

您的if語句總是計算爲true。

正如其他人已經說過的,您想用&&替換||

讓我給你一個邏輯規則,叫DeMorgan's Law。學習如何設置好的if聲明非常有用。

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

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

什麼,說是:「沒有(一個事件或其他)」是一樣的東西「不是一個事件,而不是另一種」和「沒有(一個事件和另一個)「與」不是一個事件或不是另一個事件「是一回事。

0

你是如何得到currentSiteUrl的。 URL是後面協議:: //域

嘗試使用follwoing屬性來獲取URL,然後匹配它

window.location.href 

這個網址還將包括HTTP或HTTPS和域名

2

我知道這已被回答,但認爲它可能有助於使用您自己的代碼添加一些附加信息。

至於說,從||切換logical operator&&將工作:

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

但是,爲什麼會這樣?


使用||


||邏輯運算返回true如果第一或第二表達式是true且僅當兩者都false它將返回false

因此:

  • 如果currentSiteUrl != "subsites/players.php"true您在if

  • 如果currentSiteUrl != "subsites/players.php"falsecurrentSiteUrl != "subsites/itemshop.php"是最終true您在if塊結束

因爲變量currentSiteUrl只能保存單個值,因此其中一個表達式始終爲true,因此總是會在if塊中結束。


使用&&


在另一方面使用&&邏輯運算雖然返回false如果第一或第二表達式是false且僅當兩者都true將其返回true

因此:

  • 如果currentSiteUrl != "subsites/players.php"truecurrentSiteUrl != "subsites/itemshop.php"true您在if

  • 如果currentSiteUrl != "subsites/players.php"truecurrentSiteUrl != "subsites/itemshop.php"最終是false最終在if區塊

  • 如果currentSiteUrl != "subsites/players.php"false結束了在if

再也不會有另一種情況,因爲只有當兩個表達式都true將您在if塊和結束不管你的表情是false,你都不會。