2013-04-09 4 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

+1

&& vs || ?, второе условие соответствует – David

ответ

10

Как x!='a' || x!='b' всегда true, я предполагаю, что вы хотели && вместо ||.

Прочитано || как OR и && как AND.

Подробнее в the MDN on logical operators.

+0

I через && означает, и поэтому currentSiteUrl должен иметь оба значения:/ –

+0

Он работает! благодаря –

3

currentSiteUrl может иметь только одно значение, поэтому он всегда будет, что по крайней мере один из значений вы тестируете не будет равна currentSiteUrl, что делает условие if всегда true.

Я думаю, вы хотели использовать &&, или вы хотели сделать == с ||.

2

Ваш код говорит это:

Refresh, когда currentSiteUrl отличается подсайтами/players.php или отличается от подсайтами/itemshop.php.

Так подсайты/players.php действительно отличается от подсайтами/itemshop.php

Использование & & вместо ||

2

Посмотрите на ваш, если заявление:

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

Давайте рассмотрим возможности:

  • а = Foo. Это будет считаться истинным, потому что a! = Bar
  • a = bar. Это будет оцениваться как истинное, потому что a! = Foo
  • a = что-нибудь еще. Это будет оценено как истинное, потому что a! = Foo

Оператор if всегда принимает значение true.

Как уже говорилось, вы хотите заменить || на &&.

Позвольте мне задать вам логическое правило, которое называется DeMorgan's Law. Это очень полезно, когда вы узнаете, как настроить хороший оператор if.

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

также

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

Что это говорит это: "Не (один или другое событие)" это то же самое, как "не одно событие, а не другой", и «Not (одно событие и другой) «это то же самое, что« Не одно событие, а не другое ».

0

Как вы получаете currentSiteUrl. URL-адрес следует по протоколу :: // домен

Попробуйте использовать follwoing недвижимость на, чтобы получить URL, а затем сопоставить его

window.location.href 

Этот URL будет также включать в себя 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" является false и currentSiteUrl != "subsites/itemshop.php" является true вы в конечном итоге в if блоке

Никогда не будет другого сценария, так как ваша переменная currentSiteUrl может содержать только одно значение, и как таковое одно из выражений всегда будет true, в результате чего вы всегда окажетесь в блоке if.


Использование &&


Использование логического оператора && с другой стороны, хотя доходность false, если первый или второй выражение является false и только тогда, когда оба true он будет возвращать true.

Следовательно:

  • если currentSiteUrl != "subsites/players.php" является true и currentSiteUrl != "subsites/itemshop.php" является true вы в конечном итоге в if блоке

  • если currentSiteUrl != "subsites/players.php" является true и currentSiteUrl != "subsites/itemshop.php" является false вы не конца в блок if

  • если currentSiteUrl != "subsites/players.php" является false вы сделать не конец вверх в if блоке

Там никогда не будет другой сценарий, потому что только если оба выражения являются true вы в конечном итоге в if блоке и, как скоро, как либо выражение false вы не будете.

Смежные вопросы